Bes*_*ces 19 jsf message pageload postconstruct
在一个支持bean的@PostConstruct方法中,我调用了一个EJB,它可能会返回一些我希望通过p:messages在页面上显示的消息.但是,即使我添加FacesMessages,例如FacesContext.getCurrentInstance().addMessage(...),也不会使用FacesMessages更新p:messages.
如果我不是调用从页面的动作调用EJB(比如用户点击它调用调用EJB的方法在页面上的一个按钮,然后添加的FacesMessage(S)),那么messags显示用对:消息按预期.
如何在@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"));
}
}
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
Bal*_*usC 18
在您的特定示例中,在第一次构造托管bean 之前<h:outputText>
呈现.然后添加消息为时已晚.在渲染时评估值时,首次构造bean .<h:outputText>
你需要以某种方式确保bean的构造之前的<p:messages>
呈现.在您的特定示例中,您可以通过例如移动<p:messages>
到之前 来实现此目的<f:viewAction>
.或者,通过添加一个INVOKE_APPLICATION
或在整个渲染之前RENDER_RESPONSE
调用的get ,就像你自己发现的一样.顺便说一下,添加消息不一定需要在侦听器方法中进行.
归档时间: |
|
查看次数: |
14086 次 |
最近记录: |