私はRichFaces3.3とSeam2を使用してWebアプリケーションを開発しています。
次のページがあります。
<h:form>
<s:div id="myPanel">
<h:messages/>
<rich:fileUpload fileUploadListener="#{service.uploadEvent}" maxFilesQuantity="1">
<a:support event="onuploadcomplete" reRender="myPanel"/>
</rich:fileUpload>
</s:div>
</h:form>
このservice.uploadEvent
メソッドでは、ファイルを受け取り、FacesMessageを追加して、ファイルが正常にアップロードされたことをユーザーに通知します。
実際に起こることはこれです:
- ブラウザがページをリクエストします
- サーバーは一時的な会話#1を開始します
- サーバーがページをレンダリングします
- サーバーは完成したページを送信し、会話#1を強制終了します
- クライアントはAJAXfileUpload呼び出しを開始します
- サーバーは一時的な会話#2を開始します
- サーバーはを呼び出します
service.fileUpload()
。FacesMessage
このメソッドは、会話スコープのFacesMessages
シームコンポーネントにを追加します。 - サーバーはAJAXリクエストの応答を返し、キューに入れられたすべて
FacesMessage
のを含む会話#2を強制終了します。
- 'onuploadcomplete'イベントが受信され、クライアントは'myPanel'の再レンダリングを要求します
- サーバーは一時的な会話#3を開始します
- サーバーはページをレンダリングし、
FacesMessages
会話#3用に新しい空を作成します - サーバーはAJAXリクエスト(空を含む)の応答を返し、
<h:messages/>
会話#3を強制終了します
私はこれをいくつかの方法で解決することができます:
- PAGEスコープの新しいFacesMessagesコンポーネントを作成する。
- 会話を長時間実行としてマークし、実行する
service.fileUpload()
と終了しますfileUploadComplete()
。
適切な方法は、と同じ会話でページを再レンダリングすることservice.fileUpload()
です。これは可能ですか?