フォームを使う
前回、Wicketを使ったWebアプリケーション開発の基本について簡単に説明をしました。今回は、さまざまなコンポーネントを実際に使ってみることにしましょう。まずは、フォームを使った送信の基本から作成してみましょう。
Wicketでは、フォームもコンポーネントとして用意されています。従って、Javaクラスではフォームのコンポーネントを作成し、そこに表示する部品類を組み込んでいきます。では、前回作成したPage1クラスを修正して、フォームを作成してみましょう。
package jp.allabout;
import java.io.Serializable;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.*;
import org.apache.wicket.model.PropertyModel;
public class Page1 extends WebPage {
private FormModelBean bean;
public Page1() {
bean = new FormModelBean("テキストを入力してください。","");
PropertyModel messageModel = new PropertyModel(bean, "msgStr");
PropertyModel inputModel = new PropertyModel(bean, "inputStr");
Form form = new Form("form");
Label label = new Label("message", messageModel);
this.add(label);
TextField field = new TextField("field",inputModel);
form.add(field);
FormButton button = new FormButton(this,"button");
form.add(button);
this.add(form);
}
public FormModelBean getBean() {
return bean;
}
public void setBean(FormModelBean bean) {
this.bean = bean;
}
}
class FormModelBean implements Serializable {
private String msgStr;
private String inputStr;
FormModelBean(String msg,String input){
this.msgStr = msg;
this.inputStr = input;
}
public String getMsgStr() {
return msgStr;
}
public void setMsgStr(String msgStr) {
this.msgStr = msgStr;
}
public String getInputStr() {
return inputStr;
}
public void setInputStr(String inputStr) {
this.inputStr = inputStr;
}
}
class FormButton extends Button {
private static final long serialVersionUID = 1L;
private Page1 page;
public FormButton(Page1 page, String s){
super(s);
this.page = page;
}
public void onSubmit() {
String result = "あなたは「" + page.getBean().getInputStr() +
"」と書きました。";
page.getBean().setMsgStr(result);
}
}
今回は、ずいぶんと複雑な形になりましたね。フォームを利用する場合、送信された値の管理や、送信時の処理など、いろいろ考えなければいけない点が出てきます。こうした点について、ポイントをチェックしておきましょう。