[Wicket-ja-user 486] 連続したAjaxリクエストの遅延で問題

アーカイブの一覧に戻る

d-miyashiro d-miy****@ec-on*****
2011年 1月 5日 (水) 10:52:42 JST


あけましておめでとうございます。

はじめまして。
宮代と申します。

現在、Wicketを利用したアプリケーションを開発しており、
Ajax周りで問題が起きているのでお知恵を貸してください。

Ajax周りで起きている問題は以下です。
==================================================================
「入力文字を使って検索を行い、検索結果を一覧を表示し、検索結果から次画面へ遷移する」という検索画面があります。
現在、上記を実現する為に、一覧の表示にはDataViewを使い、
検索のテキストはTextFieldにOnChangeAjaxBehaviorを利用して、
文字が入力される度に一覧が更新されるようにしています。

ここで、文字を連続で入力すると、Ajaxのリクエストがキューに溜まると思います。
キューに溜まった状態から、順次リクエストが処理されていく際、
サーバサイドとブラウザの間でタイムラグが発生していると思われ、ここで問題が起きるようです。

検索文字入力後、素早く検索結果に表示されたリンクをクリックすると、
サーバ側のDataViewの状態と、画面に表示されている検索結果とが違う状態になっているようで、
「Caused by: org.apache.wicket.WicketRuntimeException: component XXXXXXXXXXXXX not found on page」
というエラーが起きてしまいます。

例)
1.検索文字列として「AB」と入力
2.Ajaxリクエストとして「A」「AB」という2リクエストが送信される
3.「A」が処理されてブラウザに検索結果が表示される
4.「AB」が処理されてサーバ側の状態が変わる。(ブラウザ側はまだ「A」の結果が表示されている)
5.ブラウザ側で「A」の検索結果に表示されているリンクをクリックする
6.サーバ側は「AB」の検索結果しかもっていないので、「A」の検索結果のコンポーネントが見つからないというエラーになる模様
==================================================================

良い解決方法があればご教授下さい。

※上記の解決方法として、IAjaxIndicatorAwareを使うというのをどこかで読んだのですが・・・
 Ajaxリクエスト送信中に、マークアップを有効にする事で、どのように上記を防げばよいのかわかりませんでした。




Wicket-ja-user メーリングリストの案内
アーカイブの一覧に戻る