Tapestry入門記(9) Submit
サブミットされたときの処理は、フォームに
Submitコンポーネントが1つしかない場合には、
これまでやってきたようにFormコンポーネントの
listenerパラメータを使います。
それでは複数のSubmitコンポーネントがある場合はどうするのでしょうか。
<form jwcid="@Form" listener="ognl:listeners.submit">
1つはSubmitコンポーネントにタグ(名前)をつけて
ページのプロパティに代入しておく方法です。
Submitコンポーネントのselectedパラメータで
クリックされたときに代入するページのプロパティを指定し、
tagパラメータで、selectedパラメータで指定したプロパティに
代入する値を指定します。Tapestry in Actionでは
tagパラメータにString以外も使えるよと書いてありますが、
String以外の使い方が(119Pでは)書いてません。
OGNLを使えばよいようです。やってみました。
3つのSubmitに対し、最初の2つはtagを割り当て、最後のやつは
<form jwcid="@Form" listener="ognl:listeners.submit">
<input type="submit" jwcid="@Submit"
selected="ognl:submitTag"
tag="ognl:1"
label="up"/>
<input type="submit" jwcid="@Submit"
selected="ognl:submitTag"
tag="ognl:2"
label="down"/>
<input type="submit"/>
</form>
tagなしです。tagなしのやつをクリックしたときには、
submitTagプロパティは更新されないのですが、
ここで注意が必要です。更新されないので前の値が残ってしまう
のです。
そこで登場するのがPageRenderListenerです。
こいつで、初期化してしまえばいいのです。
Submit.java
ページって複数のリクエスト間で状態が維持されているように
public class Submit extends BasePage
implements PageRenderListener {private int submitTag_;
public int getSubmitTag() {
return submitTag_;
}
public void setSubmitTag(int submitTag) {
submitTag_ = submitTag;
}public void submit(IRequestCycle cycle) {
System.out.println("submitTag:" + submitTag_);
}
public void pageBeginRender(PageEvent event) {
submitTag_ = 0;
}
}
みえるけど、セッションで管理されるのかしら。-> id:masataka_kさん