jsf h:messages / h:特定clientId的消息

时间:2011-03-28 09:32:12

标签: jsf facelets message

我想以编程方式设置clientIds来显示不同的FacesMessages。在我看来,我用了

<h:outputText value="warnMessages #{facesContext.getMessageList('warnMessages')}" />
<h:outputText value="validationMessages #{facesContext.getMessageList('validationMessages')}" />

用于调试。消息都在那里。但...

<h:messages for="warnMessages"  />
<h:message for="warnMessages"  />

不显示任何内容。仅

<h:messages />

的工作原理。但是我希望将不同的消息框一起显示出来。我怎样才能做到这一点?感谢

马塞尔

3 个答案:

答案 0 :(得分:5)

您似乎滥用客户端ID将自定义/全局消息与正常验证消息分开。

你不应该这样做。如果要显示自定义/全局消息,请不要指定任何客户端ID。即,将其设置为null

context.addMessage(null, facesMessage);

这样他们都会出现在

<h:messages globalOnly="true" />

并以通常的方式使用消息的重写。

<h:inputText id="foo" required="true" />
<h:message for="foo" />

<h:messages globalOnly="false" />

答案 1 :(得分:2)

h:messages显示所有消息,也显示缺少客户端ID的消息。因此,不允许使用for属性。

for中的h:message属性必须与其他组件的id属性匹配:在您的示例中,您必须在id="warnMessages"中设置h:inputText

答案 2 :(得分:-1)

向JSF页面添加自定义消息并不困难。但是你必须付出一些努力来完成所有必需的工作。

e.g。

<h:outputText value="#{bean.warnMessages}" />
<h:outputText value="#{bean.infoMessages}" />

和bean类

...
public class Bean {
...
    public String warnMessages() {
      // concatenate (and add new lines to) all the WARNING string messages, with
      // html+css formatting, together and
      return warnings;
    }
    public String infoMessages() {
      // concatenate (and add new lines to) all the INFO string messages, with
      // html+css formatting, together and
      return infos;
    }
}

还记得在某些事件中使用ajax更新输出文本消息,这将调用bean的warnMessages()infoMessages()方法。