我的页面:
...
<div id="header">
<!-- content header -->
</div>
<div id="content">
<h:messages />
<h:ouputText value="#{example.text}" />
</div>
...
我的managedBean:
public class ExampleManagedBean(){
private String text;
public String getText(){
FacesContext.getCurrentInstance().
addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_WARN,
"Warning message...", null));
return text;
}
public void setText(String text){
this.text = text;
}
}
我的问题是警告信息没有在页面中呈现。为什么呢?
答案 0 :(得分:3)
我有两个想法。
首先,在getText()getter中添加消息。如果在h:outputText之前呈现h:消息,那么当呈现h:消息时,消息可能不存在。
其次,消息在重定向时消失。
答案 1 :(得分:1)
FacesMessage将发送至&lt; h:messages /&gt;在JSF生命周期的验证阶段。在你的情况下,getter用于派生bean属性值,并且不进行验证,因此消息为空。
理论上,您可以使用setter验证,但这是well known antipattern。
您可以“手动”验证,但以不同的方式
<div id="content">
<h:messages />
<h:form>
<h:outputText value="#{example.text}" />
<h:commandButton value="Click" action="#{example.action}"/>
</h:form>
</div>
并且操作方法是
public String action(){
FacesContext.getCurrentInstance().
addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_WARN,
"Warning message...", null));
return null;
}
更清洁的方法将使用内置或自定义验证器。