我有一个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
是一个ViewScoped bean。监听器myBB.initialize
使用FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(severity, title, detail)
问题是邮件永远不会显示。我已经验证该消息已添加到FacesContext并且未被清除(我已调试getter myBB.value
并且消息仍在FacesContext中)。
当我强制使用getFlash().setKeepMessages(true)
保留邮件时,它会起作用,但之后我会多次收到邮件。这只是一个测试,咆哮工作,而不是一个真正的解决方案。
我尝试将f:event
放到不同的地方并使用@PostContruct
方法代替preRenderView
,但没有任何运气。我是否需要在页面加载后以某种方式手动更新咆哮?
我使用Mojarra 2.2.7