「【Wicket】フォームを使うときのTips」の編集履歴(バックアップ)一覧はこちら
追加された行は緑色になります。
削除された行は赤色になります。
フォームを使うときの注意点をまとめてみます。
*●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編>http://d.hatena.ne.jp/Groovy/20070529/1180435797]] の解説を見ると、コンポーネントが参照するモデルを解決する方法が書かれていました。
+コンポーネントのコンストラクタで指定
+コンポーネントが属するフォームのコンストラクタで指定
+ページに指定
の順番で探しにいくのかな?
値の受け渡しに必ずモデルを用意する必要があるのは、ちょっと面倒くさいなぁ。
何か楽な方法があるのだるか・・・?(ダメ)
フォームを使うときの注意点をまとめてみます。
*●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編>http://d.hatena.ne.jp/Groovy/20070529/1180435797]] で解説されている内容を見ると、コンポーネントが参照するモデルを解決する方法が書かれていました。
+コンポーネントのコンストラクタで指定
+コンポーネントが属するフォームのコンストラクタで指定
+ページに指定
の順番で探しにいくのかな?
値の受け渡しに必ずモデルを用意する必要があるのは、ちょっと面倒くさいなぁ。
何か楽な方法があるのだるか・・・?(ダメ)