2016-06-15 13 views
1

私はAjaxリンクにAjaxFallbackLinkコンポーネントを使用します。リンクにマウスを重ねると、URLは./myPage?1-1.ILinkListener-xxxのようになります。しかし実際にリンクをクリックすると、Ajaxリクエストは./myPage?1-1.IBehaviorListener-xxxのようになります。Wicket AjaxFallbackLinkの動作

JavaScriptが何とかURLをILinkListenerからIBehaviorListenerに変更したようです。そうであれば驚いて、それはなぜですか?

リクエストがブラウザから送信されたときに、URLのILinkListenerがIBehaviorListenerに変更されない場合があります。コールバック関数のパラメータAjaxRequestTargetがnullのため、NullPointerExceptionが発生することがあります。私はこれを再現できませんでした。どのブラウザ設定でこれが起こる可能性があるのだろうか。どうもありがとう。

答えて

4

これらのURLはどちらも正しいです。

最初のスタティックリンクアドレス './myPage?1-1.ILinkListener-xxx。 'は、URLを呼び出してリンクを処理する場合のリンク用の汎用リンクアドレスです。

第2のAJAXリンクアドレス './myPage1-1.IBehaviorListener-xxx'は、JavaScript/AJAXの一般的な動作です。 JavaScriptが動作している場合、JavaScriptはonclickイベント(https://api.jquery.com/click/でjQuery click()関数を参照)としてアタッチされ、リンクを処理すると、HREF属性からURLを処理し続けるべきではありません。

これまでのところ、リンクをクリックすると、これらのURLの1つのみを要求することになります。しかしAjaxFallbackLinkの場合、AJAXが存在しない場合、onClick(AjaxRequestTarget)はonClick(null)として呼び出されます。既存のAjaxRequestTargetオブジェクトに依存するとNPEが発生しますが、その保証はありません。

あなたの質問の最後の部分は、再現できないときは明確ではありません。しかし、WicketはjQueryを使用しています.jQueryライブラリをHTMLに追加すると、バージョンの競合が発生する可能性があります。

類似の問題に関する詳細は、http://apache-wicket.1842946.n4.nabble.com/AjaxFallbackLink-s-onClick-with-null-AjaxRequestTarget-migrating-1-4-to-6-td4652143.html

+0

ありがとうございます。あなたが言及したように、AjaxFallbackLinkの場合はAJAXが存在しない可能性があります。これはまさに私の疑問の最後の部分です。これを現代のブラウザ、つまりAJAXではなくJavaScriptで有効にする方法は?あなたがどのように知っているかのように。 – Yuci

+0

これは、異なる問題によって引き起こされる可能性があります。他のビヘイビアを追加したり、JSイベント宣言などを停止した場合は、jQuery(JSライブラリ)への参照をオーバーライドまたは重複させたり、リンク上でonClick関数を置き換えたりできます。私はチェックする:1)HTMLヘッダーには1つだけのjQueryがある?2)あなたのリンクに他の動作はない?3)HTMLヘッダーにあなたのリンクに添付されているonClickイベントは1つだけある? 4)すべてのHTMLリンクに一般的なonclickイベントが添付されていませんか? –

+0

私の場合、Ajaxの動作が期待されていて、実際にはすべてのブラウザで正常に動作します。一部のユーザーにとっては、Tomcatアクセスログに従って代わりに汎用リンクが使用されます。したがって、唯一の違いはブラウザ側です。私は今Ajaxを無効にしようとしていますが、JavaScriptを有効にしています。私は後でこれに戻ります。 – Yuci

関連する問題