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

jsf h:messages/h:特定clientId的消息,jsf,facelets,message,Jsf,Facelets,Message,我想用编程设置的ClientID显示不同的FacesMessage。在我看来,我曾经 <h:outputText value="warnMessages #{facesContext.getMessageList('warnMessages')}" /> <h:outputText value="validationMessages #{facesContext.getMessageList('validationMessages')}" /> 用于调试。信息都在那

我想用编程设置的ClientID显示不同的FacesMessage。在我看来,我曾经

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

用于调试。信息都在那里。但是

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

没有显示任何内容。只有

<h:messages />

工作。但我想有不同的消息框一起显示。我该怎么做?谢谢


Marcel

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


h:message
中的
for
属性必须与另一个组件的
id
属性匹配:在您的示例中,您必须设置
id=“warnMessages”
在您想要的任何
h:inputText
中。

看起来您正在滥用客户端ID将自定义/全局消息与正常验证消息分开

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

context.addMessage(null, facesMessage);
这样他们都会出现在

<h:messages globalOnly="true" />

并以通常的方式使用消息的结尾

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


将自定义消息添加到JSF页面并不难。但是你需要做一些努力来完成所有需要的事情

e、 g


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

谢谢,我仍然添加了“编程”添加的faces消息不会显示
input
,而不是
output
。验证消息将与输入组件相关联。我使用了,但组件仍然没有显示任何内容。问题可能是id。在Java方面,您必须使用clientId,它并不总是与您在页面源中指定的id相同。请参阅我有验证,它执行了单字段验证。我不使用JSF或Bean验证,而是使用自定义验证。此外,我想显示警告消息,错误消息,工作流消息,也在组合。所有FacesMessage都是通过编程方式添加的。似乎我无法直接将此类消息添加到h:message(s)组件中。对吗?一条带有globalOnly=“true”的h:messages是不够的。谢谢
<h:messages globalOnly="false" />
<h:outputText value="#{bean.warnMessages}" />
<h:outputText value="#{bean.infoMessages}" />
...
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;
    }
}