在支持 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>