Hiddenの使い方
これが苦労した。。。
まぁいいや。とりあえず、
deleteForm = new Form("deleteForm"); PasswordField delPasswordText = new PasswordField("delpassword", "パスワード", true); deleteForm.add(delPasswordText); Submit deleteBtn = new Submit("deleteBtn", "delete"); deleteForm.add(deleteBtn); HiddenField idHidden = new HiddenField("delid", String.class); deleteForm.add(idHidden); addControl(deleteForm);
といったような、deleteFromという名前のついたFormがあって、
それには、delidといった名前のついたhiddenフィールドがあります。
ここでClassはStringとしておきます。
画面では、記事の件数だけループをさせ、それぞれの
記事で、削除用のformを埋め込みますが、どこのフォームがサブミットされたのかを判断するために
hiddenでidを埋め込みたいとします。
<td>削除</td> <td> #set($deleteForm.fields.delid.value=""+$article.id) $deleteForm.startTag() #foreach ($field in $deleteForm.fieldList) #if (!$field.hidden) $field #end #end #foreach ($button in $deleteForm.buttonList) $button #end $deleteForm.endTag() </td>
startTagはhiddenを埋め込むのでその前に値を設定してやります。
Map Form#getFields()
Field Map#get(String key)・・・delidがkey
Field#setValue(String value)
のような感じです。
ちなみにサブミットされると、次回表示ではすべての記事の削除用パスワードが
直前の入力値として表示されるので適宜クリアしてあげます。
また、入力チェックなどでひっかかった際には大惨事です。
これもひとつのフォームを使いまわしているのが問題なんだよね
こまりました・・・
こういう際にはどうしたもんでしょうか?
って考え付くのが・・・
- 必須はずして、フォームは毎回クリア(簡単)
- フォームを複数にする
- ArticleにFormをコンポジット(あほ)
- Article継承クラスを用意してFormをコンポジット(まぁプレゼン用Beanだと思えば・・・)
- Formのリストを用意してインデックスで記事との対応付け?
- FormにArticleを持たせて、そのリストを画面に返してみる
- ArticleとFormを持つようなオブジェクトとそのList
- TreeMapでがんばる
どれもよくわからんですね。
コンポジットでいくと、Listを総ざらいしてサブミットされたか?
というのを判断しなくてはいけなそうだし
そもそもそのマッピングされたFormを復元するためにはsessionかなんかを利用する必要も
出来てきそうだし・・・
よくわからんので、削除用Formはとりあえず1個でいきます。