私はRichFaces 3.3とSeam 2を使ってWebアプリケーションを開発しています。Seam + RichFaces fileUploadはreRenderを誘導する
私は、次のページがあります。
service.uploadEvent
方法で
<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>
を、私はファイルを受信し、ユーザーが正常にアップロードされたファイルを知らせるためFacesMessageのを追加します。
ブラウザがページを要求する-
- サーバーは、サーバーがページをレンダリングする一時的な会話#1
- 開始し
- サーバーが完成したページを送信し、:
は、実際に何が起こるかは、このです会話を中止する#1
- クライアントがAJAXファイルをアップロードする
- サーバは一時的な会話を開始します。#2
- サーバは
service.fileUpload()
を呼び出します。このメソッドは、FacesMessage
を対話スコープのFacesMessages
seamコンポーネントに追加します。 - サーバーはAJAX要求の応答を返し、キューに入れられたすべてのメッセージを含む会話#2を終了します。
FacesMessage
- 「onuploadcomplete」イベントを受信すると、クライアントは「myPanel」
- サーバが一時的な会話#3
- を開始し、サーバーがページをレンダリングし、会話のための新しい空の
FacesMessages
を作成するの再レンダリングを要求#3 - サーバ(空
<h:messages/>
を含有する)AJAXリクエストに対するレスポンスを返し、3
私はいくつかの方法でこの問題を解決することができます。
- PAGEスコープのある新しいFacesMessagesコンポーネントを作成することにより。
- 会話を
service.fileUpload()
に長時間実行し、fileUploadComplete()
を終了すると終了します。
適切な方法は、同じ会話のページをservice.fileUpload()
として再レンダリングすることです。これは可能ですか?
まあ、RichFaces4には、fileUploadに 'render'属性を指定することで解決策があるようです。この属性はRichFaces3では使用できません。 – parasietje
長時間の会話を使用してテストしました。 SeamはRenderフェーズの前にすべてのStatusMessagesをFacesContextにプッシュするため、これは機能しません。 – parasietje