JSF可以';t在preRenderView中添加渲染面消息

JSF可以';t在preRenderView中添加渲染面消息,jsf,facelets,mojarra,Jsf,Facelets,Mojarra,我有一个定义文档内容的facelet页面,如下所示: <ui:composition template="template.jspx"> <ui:define name="content"> <f:event type="preRenderView" listener="#{myBB.initialize}"/> <f:view> <h:form id="mainForm"> &l

我有一个定义文档内容的facelet页面,如下所示:

<ui:composition template="template.jspx">
<ui:define name="content">
    <f:event type="preRenderView" listener="#{myBB.initialize}"/>
    <f:view>
        <h:form id="mainForm">
            <p:growl for="mainForm" showDetail="true" showSummary="true" escape="false" sticky="true" widgetVar="growlVar"/>
            <p:outputText value="#{myBB.value}"/>
...

...
myBB
是一个可视范围的bean。监听器
myBB.initialize
使用
FacesContext.getCurrentInstance().addMessage添加FacesMessage(null,新FacesMessage(严重性、标题、详细信息)

问题是消息从未显示。我已验证消息是否已添加到FacesContext,并且未清除(我已调试getter
myBB.value
,消息仍在FacesContext中)

当我使用
getFlash().setKeepMessages(true)
强制保留消息时,它就起作用了,但随后我多次收到消息。这只是一个测试,表明咆哮有效,而不是真正的解决方案

我尝试将
f:event
放置到不同的位置,并使用
@postcontract
方法而不是
preRenderView
,但没有成功。我是否需要在页面加载后手动更新咆哮


我使用Mojarra 2.2.7

在这种情况下,您在预渲染中还做了什么?重定向?我正在加载一些数据。但没有重定向。我只添加消息。当我添加带有“mainForm”的FacesMessage时,它开始工作组件而不是null。啊,是的,当然。您在咆哮中有一个
for
,因此它不会接收全局消息(id为null的消息)。请使用此注释的部分内容自己创建一个答案,并且您自己的findigIt有点误导,因为我在使用flash scope时在随后的重新加载中获得消息。