【发布时间】:2012-04-29 03:35:21
【问题描述】:
在支持 bean 的 @PostConstruct 方法中,我调用了一个 EJB,它可能会返回一些我想通过 p:messages 显示在页面上的消息。但是,即使我添加 FacesMessages 例如FacesContext.getCurrentInstance().addMessage(...), p:messages 没有被 FacesMessages 更新。
如果我改为对来自页面的操作调用 EJB(例如,用户单击页面上的按钮,该按钮调用调用 EJB 的方法,然后添加 FacesMessage(s)),则消息显示按预期使用 p:messages 。
如何在 @PostConstruct 期间添加 Faces 消息并在页面初始呈现时显示它们?
代码:
Page1Controller.java:
@ManagedBean
public class Page1Controller
{
@PostConstruct
public void init()
{
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage("Test Message from @PostConstruct"));
}
public String getValue()
{
return "Some Value";
}
public void triggerMessage(ActionEvent event)
{
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage("Test Message from Trigger Button"));
}
}
page1.xhtml
<h:form>
<p:messages showDetail="true" showSummary="true" autoUpdate="true"/>
<h:outputText value="#{page1Controller.value}"/>
<br/>
<p:commandButton value="Trigger Message"
actionListener="#{page1Controller.triggerMessage}"/>
</h:form>
【问题讨论】:
-
注意——如果使用 f:event type="preRenderView" 侦听器指令调用相同的方法(调用 EJB 等),则 FacesMessage 会适当更新。我应该这样做吗?
-
使用 Mojarra 2.1.7、Primefaces 3.2(最新稳定版)。
标签: jsf message pageload postconstruct