繁体   English   中英

使用FacesContext.getCurrentInstance()的自定义消息.addMessage不显示在页面(JSF)中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM