哈囉大家好,這裡是跑去看了一下別人嵌入式系統的小編過路君子
沒想到小小一台的機器可以達成非常多的事情,還有自己專屬的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"?,如果有需要的人可以自行前往。