[精讚] [會員登入]
979

【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

你可能感興趣的文章

【教程】(進階版)如何用Sigil製作一本高質量的epub 下載好了Sigil之後除了直接把文字貼進去以外,還有:變更字型、著色、導入CSS……等等功能,不知道你有沒有發現呢?

【JDA/discord bot】package does not exist fix JDA 4.0 和 5.0 差別還是很大的

【C++】使用struct array和一維int array模擬二維int array 主要是因為用sort去排序int array的二維陣列小編懶得研究,於是就研究了一種維持一維陣列但是有二維陣列效果的程式,小編就廢~~

【Javascript】(Event)常用的網頁事件 不寫下來絕對下又會忘記,然後每次又都要回到MDN去查,麻煩

【JDA/discord bot】刪除事件或slash(斜槓)指令的reply訊息 如何正確的等待 Async 的結束,在進行接下來的刪除訊息動作

【C++】一些好用的C++小功能 —— 貳 承襲上一篇的C++小功能,筆記下來以免自己以後忘記了。

隨機好文

高捷少女:小穹與果仁巧克力㊥ 艾咪臉上泛起笑容說:「妳知道嗎?就跟花語一樣,每一種巧克力也都有各自的涵義:薄荷巧克力代表初戀;卡通巧克力代表天真爛漫;而果仁巧克力代表的是窩心,還有想陪伴對方的心情,這在德國是女生之間在慶生時會彼此

高捷少女:地下城的探險少女④ 耐耐突然抖了一下。「妳們聽到了嗎?」她說。「聽到什麼?」婕兒問。「那個腳步聲啊!」耐耐嚥了一下喉嚨,覺得有些害怕。「有一陣腳步聲經過,很小聲,但我還是聽到了。』「妳聽錯了吧……等等!」婕兒使終維持著將

高捷少女:購票大作戰① 「各位乘客,本班機即將降落,感謝各位乘客的搭乘……」隨著空中小姐的廣播音,那架飛機逐漸降落在地面,裡面的乘客們也紛紛開始整理自己的行李。 那個有著歐美人五官的少女抓緊包包,看著外面的小港機場,臉上緩緩

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

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