[精讚] [會員登入]
520

【Wickct】如何製作一個簡單的動態響應頁面和傳遞參數至其他頁面

身為一個後端架構程式,這個功能當然是非常重要之一

分享此文連結 //n.sfs.tw/15679

分享連結 【Wickct】如何製作一個簡單的動態響應頁面和傳遞參數至其他頁面@小編過路君子
(文章歡迎轉載,務必尊重版權註明連結來源)
2022-03-16 18:06:05 最後編修
2022-03-12 05:02:09 By 過路君子
 

哈囉大家好,這裡是跑去看了一下別人嵌入式系統的小編過路君子

沒想到小小一台的機器可以達成非常多的事情,還有自己專屬的OS呢

 

 

官方文檔:Wicket 9.x Reference Guide

等等文章出現的所有程式碼皆由官方文檔所提供的範例做修改,如果需要更詳細的說明可以點擊上方網址前往察看。

 

那假設我們在同個目錄下有兩個網頁 hello.html 和 another.html。

(所有圖片點擊都可以放大、變高清)

這篇的目錄結構是承接這篇:【Maven】[Wicket](Java) 如何部署Wicket到Wildfly內@小編過路君子 ,這邊只貼出不同之處而已,完整的目錄結構要到那篇去看喔。

 

 

使用 POST 做動態響應

hello.html

<!doctype html>
<html>
    <head>
        <title>Wicket GET</title>
    </head>

    <body>
        <p><a wicket:id="gotoAnother">Go to another page</a></p>

        <form wicket:id="userSend">
            <p><input type="text" wicket:id="userInput" /><br />
            <input type="submit" value="Send" /></p>
        </form>
    </body>
</html>

hello.java

package taiwan.webpage;

import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;

import taiwan.webpage.another;

public class hello extends WebPage
{
    public hello()
    {
        add(new Link<Void>("gotoAnother")
        {
            @Override
            public void onClick()
            {
                setResponsePage(another.class);
            }
        });

        add(new userControl("userSend"));
    }

    public class userControl extends Form
    {
        private String userInput;

        public userControl(String id)
        {
            super(id);
            setDefaultModel(new CompoundPropertyModel(this));

            add(new TextField("userInput"));
        }

        public final void onSubmit()
        {
            PageParameters pageParameters = new PageParameters();
            pageParameters.add("value", userInput);

            setResponsePage(another.class, pageParameters);
        }
    }
}

another.html

<!doctype html>
<html>
    <head>
        <title>User Input</title>
    </head>

    <body>
        <h1><span wicket:id="message"></span></h1>
    </body>
</html>

another.java

package taiwan.webpage;

import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.request.mapper.parameter.PageParameters;

public class another extends WebPage
{
    public another()
    {
        add(new Label("message", "This is another page."));
    }

    public another(PageParameters parameters)
    {
        //If use Wicketstuff-Annotation shouldn't write super()
        //super(parameters);
        add(new Label("message", parameters.get("value")));
    }
}

 

實際運行畫面

如果直接點擊上方網址會不帶任何的參數直接跳轉到 another.html,那這時候 another.java 就會執行 another() 的建構式,那會看到預設顯示的訊息。

但若在下方的輸入框輸入內容,只要按下 Send 按鈕,就會將內容帶入並跳轉到 another.html,那這時 another.java 就會執行 another(PageParameters parameters) 的建構式,會看到使用者自行填入的內容。

 

那既然是以 POST 作為傳輸方式,那照理說是不是不應該在網址列出現「?name=小編過路君子」這種字樣。

要隱藏也非常簡單,把 hello.java 的倒數第四行的

setResponsePage(another.class, pageParameters);

改成

setResponsePage(new another(pageParameters));

就可以囉!

 

至於為什麼小編的網址這麼簡單乾淨利落,可以參考這篇文章:【Wickct】(縮短網址) 如何將網頁掛載到特定路徑下@小編過路君子

那如果想要知道除了使用 Link 還能使用什麼方式產生 Wicket 的特殊超連結,可以參考這篇:【Wickct】(link) <a> 如何新增超連結@小編過路君子

 

 

 

後記

如何隱藏在網址列的頁面參數真的有夠難找,翻了好久才終於找到一個原生、標準、漂亮的解答。

那小編就把這個頁面放在這裡:Wicket redirect: how to pass on parameters and keeps URLs "pretty"?,如果有需要的人可以自行前往。

END

你可能感興趣的文章

【PaperMC - API】如何發送指令到伺服器內 How to sending or executing commands to server

【Wicket】[Cookie]如何讀取和設定客戶端的Cookie 對於某些參數需要給予使用者,我們可以使用 Cookie 來讓客戶端記著,之後再跟伺服器裡的比對來達到驗證的目的

【Discord bot 2.0.1】(discord.ui.View)如何將舊機器人升級至目前最新版本 很多時候升級軟體是為了讓別人覺得你的程式很先進,但這次卻是因為要使用某個新功能

【Maven】如何開始撰寫 Minecraft PaperMC server插件 萬事起頭難,要開始寫一個插件最難的一步就是要怎麼開始寫

【JDA/discord bot】取得頻道第一筆或最新(最後一筆)的歷史訊息 在不處理訊息的先後順序下取得相關的歷史訊息

【NodeMCU / ESP8266】[Arduino]測量溫溼度並上傳至ThinkSpeak 使用簡單的溫度計來測量溫濕度並上傳至第三方網站,這樣他人只要有瀏覽器就能看到我們的數據了

我有話要說

>>

限制:留言最高字數1000字。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

高捷少女:購票大作戰③  歐巴桑露出懷疑的表情。「怎麼了,您跟夏尼爾小姐不是朋友嗎?只要打電話確認就好了,不是嗎?」「是……是這樣沒錯……可是……」小穹支支吾吾地說。我的確是潔西塔的朋友,但

高捷少女:美麗島的守護者③ 小雅閉上眼睛,思索在高捷發生的點點滴滴。她心意已決,在高捷的日子的確也有快樂的部分,不過她相信換個方向是更好的決定。有關高捷的所有美好回憶,小雅決定保留在心裡就好,繼續在高捷工作只會讓自己更痛苦而已,

高捷少女:美麗島的守護者⑥ 一陣貓叫傳到小雅耳中,原本要朝小雅撲過去的北風轉了個圈,從半空中落地,牠的表情宛如五雷轟頂。這聲音……難道是……

高捷少女:美麗島的守護者(終) 「我是她的師娘,妳一定就是艾米莉亞吧?小雅昨晚有跟我說到您。」「師娘?」艾米疑惑不解。

高捷少女:耐耐的新年驚喜③ 即使如此,夫人仍然每年都會問老爺是否能空出一週時間,但總是被回絕,除了前年以外。老爺答應夫人一定會排出空檔,他們在去年的二十三日前往澳洲。」耐耐嘆了口氣。「那一天的晚上,我打電話給媽媽時,她很高興地告