[精讚] [會員登入]
728

【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

你可能感興趣的文章

【JAVA】[java.lang.Class]如何不透過new來實體化class 在某些極端狀態下,我們沒有辦法直接將實體化後的 Object 傳入函數內,只能採用傳入 Class 在實體化成物件這種極端的方式來進行

【Arduino/LinkIt 7697】實作小小的 MQTT Publish & Subscribe 若是要多點對多點傳輸資料,那使用 MQTT 即可快速的達成我們所需的目的

【MySQL】每個類別中取前三高 一個由多層次所組成的SELECT述句

【Linux】[CentOS 8] How to update sudo instruction The last time I wanted to update the sudo command should be 2017, right? It's 2021 in a blink of an

【Python3】11 - 字典(Dictionary)的使用範例 python3的幾個字典使用範例,改寫自他人perl的範例

【Raspberry Pi/樹梅派】(gcc 10) 如何安裝 gcc & g++ 需要的時間非常久,不愧是gcc的編譯

隨機好文

高捷少女:小穹與果仁巧克力㊤ 阿敏突然輕笑一聲,從櫃臺拿來一個塑膠餐盒,打開給大家看。「這是小穹烤的餅乾,妳們吃吃看就知道她為什麼不想講了。」小穹變得緊張起來。「阿敏,妳怎麼還留著呀?」艾米莉亞、婕兒與耐耐各自拿了一塊,把夾著奶油

高捷少女:地下城的探險少女⑤ 小穹寫好後,耐耐看了一遍。「我想我應該辦得到。」她說完跪坐在地上,然後把古箏安放在大腿上,並將樂譜放在前面的地板。「要開始囉。」耐耐閉上眼睛,深呼吸一口氣,小穹等人在一旁看著她,心中暗自替她打氣。

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

高捷少女:耐耐的新年驚喜① 耐耐拿出手機。「我回來囉。」她說。幾分鐘後,木門緩緩打開。當它完全開啟的那一刻,小穹手中的包包掉到地上;艾米揉揉雙眼,確定自己看見的景象;婕兒的三魂七魄飛到了九霄雲外。

婕兒──她的青春① 「各位乘客,本列車即將抵達拉里奧哈自治區,並在此地停留三天兩夜,後天的中午十二點將搭乘班機返回臺灣,感謝各位乘客對本次旅程的配合。」火車上的廣播器朗誦道。「時間過得真快呢,這次的歐洲之旅就這樣結束了,