記事テーブルの中にformを埋め込んでみた

さて、削除ということで、パスワードを入力して、
ボタンを押下したらパスワードと記事idを元に、
認証して削除という処理をしたい。
となるとどうしたもんか・・・
パスワードはクエリに埋め込むわけにはいかないし・・・
というわけで記事のカラムにフォームを埋め込みます。
記事それぞれにつき別のフォーム・・・というわけにもいかなそうなので、
共通の削除用フォームを埋め込みます。

//Field
private Form 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);
//onRender
   
   row = new HashMap<String, Object>();
   row.put("koumoku", "削除");
   
   Field idHidden = deleteForm.getField("delid");
   idHidden.setValue(String.valueOf(article.getId()));
   
   row.put("atai", deleteForm.toString());
   list.add(row);

idHiddenはループごとに、値をセットしてあげて、なおかつ、
文字列にしたものをMapにつめてあげます。(そうしないと値が最後のになっちゃうので)
ここでまた、Columnのエスケープ無効が役に立ちます

//onRenderの修正
   Column valueColumn = new Column("atai");
   valueColumn.setEscapeHtml(false);
   table.addColumn(valueColumn);

とするとなんとか
値の取得が可能となりました。

//onPost
  String id = deleteForm.getFieldValue("delid");
  String pass = deleteForm.getFieldValue("delpassword");
  
  //パスワードのクリア
  deleteForm.getField("delpassword").setValue(null);

投稿ボタンと、削除ボタンどっちが押されたのかは?
については
form.getFieldValue("submitBtn")
の値の長さをチェックすれば判定できそうです。

雑感

全然簡単ではなくなってきましたね・・・
やはりhtmの方で表現した方が簡単そうです。
まぁソース追いながら勉強という点ではがりがりがんばるのもいいのでしょうが・・・
ちなみに削除用のフォームですが、指定していないのに枠が表示されてしまいます。