[精讚] [會員登入]
917

【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

你可能感興趣的文章

【Maven】如何創建一個簡單可執行的JAR檔 滿重要的一個小功能,畢竟有時候是要傳遞的是JAR檔,而不是直接透過Maven直接部屬之類的

【Wicket】[Header]如何讀取來自客戶端地檔頭和傳送自訂擋頭至客戶端 當需要設定檔頭或是讀取來自客戶端的檔頭時,這些程式碼就很好用

【Wicket】[URI]使用Java取得目前網址 這是個還滿常用的功能,可惜 Wicket 沒有內建函式可以快速取得我們要的部分,只能依靠我們自己後期的字串剖析

【Wickct】(link) <a> 如何新增超連結 簡單來說有兩種方式,小編個人比較偏好 的方法

【Minecraft】[CoreProtect|BungeeCord]如何重新命名世界或維度名稱 當只有一個伺服器的時候,問題往往處理起來非常簡單,但是一旦當伺服器成長至兩台以上,事情便開始有趣了起來

【Wicket】[nonce]如何導入css以及javascript 如果只是用一般的 HTML link 或是 script 標籤來寫,會被 CSP 擋住,禁止加載資源,那我們除了關閉 CSP 以外還有沒有辦法來解決呢?

隨機好文

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

高捷少女:美麗島的守護者⑤  雖然暫時不用怕牠們了,可是一直躲在這裡終究不是辦法,小雅心想。她看看四周,這間更衣室沒有窗戶或後門,她不禁著急起來,不可能一直躲在這裡面,但從門出去只會被群貓圍攻而已。小雅低下頭苦思該怎麼辦,過了不

【歌評】蓮台野夜行-少女幻葬~ Necro-Fantasy 這首歌就像墜入無盡深淵的同時面臨最終決戰;不管贏還是輸,你終將失去一切,永遠消失

【歌評】蓮台野夜行 - 幻視之夜 ~ Ghostly Eyes 若有什麼是在聽到boss曲前的鋪襯,那一定就是每個系列的道中曲

【英翻中歌詞】(二創歌)東方妖妖夢-人形裁判 ~玩弄人偶的少女 人形裁判 ~ 人の形弄びし少女 很久很久以前,在一個神奇的異地,住著一位少女,十分惹人憐愛 她的皮膚就像陶瓷一樣潔白,眼睛就像藍色寶珠般明亮