[英]JSF - calling FacesContext.getCurrentInstance() in a static context
[英]Custom message with FacesContext.getCurrentInstance().addMessage is not displayed in page (JSF)
我的页面:
...
<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;
}
}
我的问题是警告消息不在页面中呈现。 为什么?
我有两个想法。
首先,在getText()getter中添加消息。 如果在h:outputText之前呈现h:消息,那么当呈现h:消息时,消息可能不存在。
其次,消息在重定向时消失。
FacesMessage在JSF生命周期的验证阶段发送到<h:messages />。 在您的情况下,getter用于派生bean属性值,并且不进行验证,因此消息为空。
从理论上讲,您可以使用setter验证,但这是一个众所周知的反模式 。
您可以“手动”验证,但以不同的方式
<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;
}
更清洁的方法将使用内置或自定义验证器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.