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

Back to archive index

Hideyuki TAKEUCHI webma****@chime*****
2011年 1月 5日 (水) 13:44:10 JST


たけうち(chimerast)と申します。

まず、一つ目にテキスト入力を受け付けて更新するような場合は、
OnChangeAjaxBehaviorのsetThrottleDelay()を呼び出すと
よいです。これを使用すると、onchangeイベントが起きた後、
引数で指定した時間待機し、待機中に再びonchangeイベントが
起きた場合には前のイベントをサーバに送信する前に
破棄するようになります。

component not found については、可能であれば、リンクを
BookmarkablePageLinkを使用して、パラメータをPageParametersで
受け渡すようにするのが一番確実だと思います。これだと、
ステートレスになるのでサーバ側の状態に関係なく遷移することが
できるようになります。

--
たけうち

(11/01/05 10:52), d-miyashiro wrote:
> 
> あけましておめでとうございます。
> 
> はじめまして。
> 宮代と申します。
> 
> 現在、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 mailing list
> Wicke****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/wicket-ja-user




Wicket-ja-user メーリングリストの案内
Back to archive index