我想以编程方式设置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 />
的工作原理。但是我希望将不同的消息框一起显示出来。我怎样才能做到这一点?感谢
马塞尔
答案 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()
方法。