Tsutomu Yano
t_yano****@me*****
2012年 3月 1日 (木) 23:23:56 JST
矢野です。 自信はないのですが… Wicket.$$は、引数のエレメントのownerDocumentが現在のグローバルdocumentと同じかどうかをチェックする関数です。で、thisはおそらく、ビヘイビアの貼られたコンポーネントに対応するエレメントを想定しているのでは。 Wicket.$$(this) で、ビヘイビアのエレメントが現在のdocumentの外にあったりしないかチェックし、Wicket.$$(formId)で、今度はform自体が現在のdocumentの外にあったりしないかチェックしてると。 で、「現在のdocumentの外にある」という状況がどう発生するかですが、試してないですが、たぶんiframeとかで発生するんじゃないかと思います。 そうすると、このコードはセキュリティ対策なのかなあ? という印象を持ってます。いまのdocument外部のボタンやリンクから、フォームをサブミットさせないためなのかな?と。 なんの確信もなく、コードをざっと読んだだけの感想です。 --------------------------------------------------- 矢野 勉(やの つとむ) 電子メール: t_yano****@me***** --------------------------------------------------- On 2012/02/28, at 20:59, maga****@hagan***** wrote: > 船田です。 > > 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は、何を想定しているのか? > この意図が汲み取れないでいます。 > > 何かヒントになるようなことでもかまいませんのでご教授いただければと思います。 > > _______________________________________________ > Wicket-ja-user mailing list > Wicke****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/wicket-ja-user