maga****@hagan*****
maga****@hagan*****
2012年 2月 28日 (火) 20:59:39 JST
船田です。 Wicket1.5.4を使用しています。 フォームで入力された内容を即時にWicketで処理するために AjaxFormSubmitBehaviorを使い、フォームのデータをAjaxでPOSTしています。 その中でブラウザやBehaviorの書き方によってAjaxが動作しないパターンがありました。 原因を調べていたところAjaxFormSubmitBehavior#getPreconditionScript() が出力するjavascriptにthisが指定されていることがわかりました。 @Override protected CharSequence getPreconditionScript() { return "return Wicket.$$(this)&&Wicket.$$('" + getForm().getMarkupId() + "')"; } 当然のことながら、 javascriptのthisは文脈によって違うオブジェクトを返します。 バインドされているpreconditionがfalseを返す場合があり、 Ajaxの処理が実行されないまま javascriptのwicketSubmitFormById()関数が終了します。 AjaxFormSubmitBehavior#getPreconditionScript()をオーバーライドして trueを返すようなjavascriptを実装すれば回避できるのですが、根本的な解決ではない気がします。 本来、Wicket.$$(this) のthisは、何を想定しているのか? この意図が汲み取れないでいます。 何かヒントになるようなことでもかまいませんのでご教授いただければと思います。