概要
私たちの Web アプリケーションでは、ユーザーがページの読み込みよりも「速く」クリックすると、ブラウザーはユーザーに最初のリクエストを表示するようです (いくつかのエラー メッセージによると)。私はそれが2番目の要求であることを期待していたでしょう.
その他の背景情報
Struts1 Web アプリケーションがあります。ユーザー セッションでは、ユーザー インタラクションの現在のコンテキストを配置します。
request.getSession().setAttribute("context", <something>);
たとえば、アプリはマスター レコードのリストを表示し、コンテキストにはユーザーに関する情報が保持されます。ユーザーがマスター レコードをクリックすると、そのレコードに関する情報がユーザー セッション オブジェクトに保存されます。JSP では、コンテキスト オブジェクトをローカル変数に割り当てることがよくあります。これは、特定のタイプ (MasterRecordDTO
または などUserDTO
)にキャストする必要があります。
<% MasterRecordDTO dto = (MasterRecordDTO) request.getSession().getAttribute("context"); %>
その後、ユーザーはそのマスター レコードの詳細ビューにドリルダウンできます。のような sth を示すブレッドクラムがありlist > master > detail
ます。これらは、ユーザーがブレッドクラムを使用してナビゲートできるようにするためのリンクです。
その状況で、ユーザーが最初に「マスター」をクリックし、すぐに「リスト」をクリックすると、ClassCastException が発生します。
"UserDTO cannot be cast to MasterRecordDTO"
これは、MasterRecord-JSPdto
が最初のリクエストで変数を割り当てたときに、2 番目のリクエストですでにcontext
セッション属性がUserDTO
オブジェクトに設定されていることを意味します。
質問
ブラウザが最初のリクエストを「放棄」し、2 番目のリクエストの結果をユーザーに表示すると予想していました (この例では、マスター レコードのリスト)。誰か私にこれを説明できますか?
アップデート
ブレッドクラム リンクは別の HTML フレームにあります。Internet Explorer 7 でこの問題が発生しました。Firefox 11 で試してみましたが、どうやら 2 回目のクリックでも送信されません。