Formに入力した値を表示する
この記事は最初の投稿日から19年経過しています。内容が古い可能性があります。
前回作った HelloWorld を改造して、Formに入力した値を表示するように変えてみます。
src/HelloWorld/HelloWorld.html に Form を追加する。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>Wicket HelloWorld</title> </head> <body> <form wicket:id = "form"> 入力してください。<br> <input type="text" wicket:id = "msgInput"> <input type = "submit" value="入力完了"/> </form> <hr> あなたが入力したのは、「 <span wicket:id="message">Message goes here</span> 」です。 </body> </html>
src/HelloWorld/HelloWorld.java で Form を処理する。
package helloworld; import wicket.markup.html.WebPage; import wicket.markup.html.basic.Label; import wicket.markup.html.form.Form; import wicket.markup.html.form.TextField; import wicket.model.PropertyModel; public class HelloWorld extends WebPage { private String message = ""; public HelloWorld() { PropertyModel messageModel = new PropertyModel(this, "message"); add(new Label("message", messageModel)); Form form = new Form("form"); form.add(new TextField("msgInput", messageModel)); add(form); } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
むむっ。これはわからない。PropertyModel とは何でしょう。
Wicket の JavaDoc によると、
A PropertyModel is used to dynamically access a model using a “property expression".
となっています。モデルに対してプロパティっぽいアクセスができると言ってます?
PropertyModel messageModel = new PropertyModel(this, "message");
となっているので、自分自身のインスタンスの getter/setter 付きのメンバー変数である message を関連づけたモデルを作成し、それを、
add(new Label("message", messageModel));
で、
<span wicket:id="message">Message goes here</span>
に割り当て、さらに、
form.add(new TextField("msgInput", messageModel));
で Form の
<input type="text" wicket:id = "msgInput">
に割り当てているというところでしょうか。
Form に入力された値が PropertyModel を通して Bean にセットされ、PropertyModel を経由して取り出されて画面に表示される・・・ということが起こっているように思えます。
とりあえず動かしてみる。
Tomcat を起動して、URLを叩くと入力フォームが表示され、「入力完了」ボタンを押すと入力した値が表示されました。
この、PropertyModel とはどういう概念なのか?Wicketでの位置づけは?をきちんと理解する必要がありそうです。
今日はここまで。