【问题标题】:Seam 2.2.2.Final Messages to display after a4j:mediaOutputSeam 2.2.2.Final Messages 在 a4j:mediaOutput 之后显示
【发布时间】:2011-12-07 16:38:58
【问题描述】:

我有一个这样的 xhtml:

<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 中也有绘制方法,如果该方法给出异常,它会生成消息。像这样:

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");

}

}

现在消息永远不会显示。谁能告诉我我做错了什么?

提前致谢

【问题讨论】:

    标签: jsf seam2


    【解决方案1】:

    FacesMessages 是一个对话范围的接缝组件。假设您正在使用临时对话,会发生以下情况:

    1. 对 JSF 页面的初始请求。已创建临时对话 #1。
    2. JSF 页面呈现,对话 #1 被终止。
    3. 对 mediaOutput 的 AJAX 请求。已创建临时对话 #2。
    4. 图像已渲染。 FacesMessages 对象绑定到对话 #2。
    5. 图像已返回。对话 #2 被终止。
    6. a4j:outputPanel 是 ajaxRendered。已创建临时对话 #3。
    7. 在对话 #3 中呈现一个空的 FacesMessages。

    您可以通过在您的 a4j:outputPanels 中包含 #{conversation.id} 并在您的 paint() 方法中记录对话 ID 来对此进行测试。

    这个问题有两种解决方案。要么你开始一个长时间的对话,然后添加到你的 mediaOutput。另一种解决方案是不使用 FacesMessages,而是使用自定义 PAGE 范围的组件来保存您的消息。

    您还可以切换到 RichFaces4,它为每个 Richfaces 组件包含一个“render”参数,以确保在与初始 mediaOutput AJAX 请求相同的请求中发出重新呈现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-02
      • 1970-01-01
      • 2012-07-29
      • 1970-01-01
      • 1970-01-01
      • 2010-10-03
      • 1970-01-01
      相关资源
      最近更新 更多