フォームを使うときの注意点をまとめてみます。

●FormをPageに追加(add)するのは、Formにコントロールを追加した後で。


addメソッドの中で、htmlのタグとコンポーネントの関連付けを実行しているようで(たぶん)Formに必要なコンポーネントを追加する前に、FormだけWebPageに追加してしまうと、エラーで落ちます。


●Formの入力値を受け取るModelをセットしておかないと、サブミット(ポストバック?)したときにエラーで落ちます。


Wicketは、Formの入力値を受け取るためのモデルを事前にWebPageに設定しておく必要があります。
これを忘れると、サブミットしたときにエラーで落ちます。。トホホ。

こんなエラーが出ます。
WicketMessage: Method onFormSubmitted of interface org.apache.wicket.markup.html.form.IFormSubmitListener targeted at component [MarkupContainer [Component id = form, page = net.mekefactory.wicket.TextField1Page, path = 1:form.Form, isVisible = true, isVersioned = true]] threw an exception
Root cause:
java.lang.IllegalStateException: Attempt to set model object on null model of component: form:text

と思ったら、-「サンプルのソースを見る」の第3回、unicode converter編 で解説されている内容を見ると、コンポーネントが参照するモデルを解決する方法が書かれていました。
  1. コンポーネントのコンストラクタで指定
  2. コンポーネントが属するフォームのコンストラクタで指定
  3. ページに指定

の順番で探しにいくのかな?
値の受け渡しに必ずモデルを用意する必要があるのは、ちょっと面倒くさいなぁ。
何か楽な方法があるのだるか・・・?(ダメ)
最終更新:2007年10月04日 20:39