0

私は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を開始します
    • サーバーがページをレンダリングします
    • サーバーは完成したページを送信し、会話#1を強制終了します
  2. クライアントはAJAXfileUpload呼び出しを開始します
    • サーバーは一時的な会話#2を開始します
    • サーバーはを呼び出しますservice.fileUpload()FacesMessageこのメソッドは、会話スコープのFacesMessagesシームコンポーネントにを追加します。
    • サーバーはAJAXリクエストの応答を返し、キューに入れられたすべてFacesMessageのを含む会話#2を強制終了します。
  3. 'onuploadcomplete'イベントが受信され、クライアントは'myPanel'の再レンダリングを要求します
    • サーバーは一時的な会話#3を開始します
    • サーバーはページをレンダリングし、FacesMessages会話#3用に新しい空を作成します
    • サーバーはAJAXリクエスト(空を含む)の応答を返し、<h:messages/>会話#3を強制終了します

私はこれをいくつかの方法で解決することができます:

  1. PAGEスコープの新しいFacesMessagesコンポーネントを作成する。
  2. 会話を長時間実行としてマークし、実行するservice.fileUpload()と終了しますfileUploadComplete()

適切な方法は、と同じ会話でページを再レンダリングすることservice.fileUpload()です。これは可能ですか?

4

2 に答える 2

0

これは、カスタムStatusMessagesコンポーネントを使用し、Rerenderで引き続き使用できるコンテキスト(PAGEや長時間実行されるCONVERSATIONなど)にスコープすることによってのみ解決できます。

于 2012-01-06T10:33:41.773 に答える
0

に置き換え<h:messages />てみました<rich:messages />か?AJAXアクションが新しいFacesMessagesを作成するときにうまく機能します。http://docs.jboss.org/richfaces/latest_3_3_X/en/devguide/html/rich_messages.htmlを参照してください

于 2012-01-09T15:20:12.613 に答える