2011-12-07 9 views
0

私はこのようなXHTMLを有する:シーム2.2.2.Finalメッセージ:mediaOutput

<a4j:outputPanel id="displayGraph" layout="block" style="clear:both; margin-top: 0px; margin-left: 80px;margin-bottom: 20px;"> 
     <a4j:mediaOutput element="img" cacheable="false" session="false" createContent="#{generateGraph.paint}" value="#{graph}" mimeType="image/png" standby="Loading" /> 
    </a4j:outputPanel> 

    <a4j:outputPanel id="errorMessage" ajaxRendered="true"> 
     <h:messages id="messages" styleClass="message" errorClass="errormsg" infoClass="infomsg" warnClass="warnmsg"/> 
    </a4j:outputPanel> 

はまた、私は、メソッドが例外を与える場合にメッセージを生成するBeanをバッキングにpaintメソッドを有します。

public void paint(OutputStream os, Object data) { 
    try{ 
      //some actions 
    } catch (IOException e) { 
     e.printStackTrace(); 
     FacesMessages.instance().add(Severity.ERROR, "Sorry connection can not be achieved"); 
    } 

} else { 
     FacesMessages.instance().add(Severity.ERROR, "Sorry server does not exist"); 

} 

} 

ここではメッセージは表示されません。誰かが私が間違っていることを親切に教えてくれますか?予め

おかげ

答えて

0

facesMessagesの会話スコープのSeamコンポーネントです。あなたが一時的な会話を使用しているとすれば、これはどうなりますか:

  1. JSFページへの最初のリクエスト。一時的な会話#1が作成されました。
  2. JSFページがレンダリングされ、会話#1が終了しました。
  3. mediaOutputのAJAXリクエスト。一時的な対話#2が作成されました。
  4. イメージがレンダリングされます。会話#2にバインドされたFacesMessagesオブジェクト。
  5. イメージが返されます。会話#2が殺されました。
  6. a4j:outputPanelはajaxRenderedです。一時的な会話#3が作成されました。
  7. 空白のFacesMessagesは、会話#3でレンダリングされます。

あなたのa4j両方で#{conversation.id}を含むことによってこれをテストすることができます:outputPanelsを、そしてあなたのpaint()方法で会話IDをログに記録することもできます。

この問題には2つの解決策があります。長時間会話を始めて、あなたのmediaOutputに追加してください。もう1つの解決策は、FacesMessagesを使用するのではなく、カスタムPAGEスコープのコンポーネントを使用してメッセージを保持することです。

RichFaces4に切り替えることもできます。RichFaces4には、すべてのrichfacesコンポーネントの "render"引数が含まれています。これにより、リノルダがmediaOutput AJAXの初期要求と同じ要求で発行されます。