1

这是场景。在我的托管 bean 中,我创建了一个新的 FacesMessage 对象并将其添加到 FacesContext 中,而不将它与任何 UI 组件相关联,如下所示:

FacesContext context = FacesContext.getCurrentInstance();
FacesMessage message = new FacesMessage();
message.setSummary("Hi there!");
context.addMessage(null, message);

在我的 xhtml 页面中,我像这样输出我的消息:

<h:messages id="someId" globalOnly="true" showSummary="true" showDetail="false" styleClass="startUpMessages"/>

但是,生成的 html 会显示消息摘要两次,如下所示:

<ul id="mainForm:someId" class="startUpMessages"><li>   Hi there! </li><li> Hi there! </li></ul>
<ul id="javax_faces_developmentstage_messages" title="Project Stage[Development]: Unhandled Messages"></ul>

谁能解释这种行为?

4

2 回答 2

2

原来这个问题是由应用程序中的阶段侦听器的疏忽引起的,问题中没有提到。

此阶段侦听器旨在解决在应用程序的一个特定实例中跨两个相邻请求持久化 FacesMessage 的问题。它将在请求范围 bean 中创建的所有 FacesMessage 临时存储到会话中。

然而,阶段监听器被错误地实现为在每个请求期间执行。因此,在会话范围的 bean 中创建的 FacesMessages(就像有问题的那个)最终被复制了,这解释了为什么我看到消息的摘要显示了两次。

于 2012-10-29T20:06:39.110 回答
0

尝试更改您的 Web.xml。从
更改为PROJECT_STAGEDevelopmentProduction

<!-- Web application context parameters -->
<context-param>
    <description>One of Production, Development, UnitTest, SystemTest, Extension
        Default is Production.
    </description>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Production</param-value>
</context-param>
于 2012-05-12T07:13:05.200 回答