Templates 模板中的多个primefaces消息

Templates 模板中的多个primefaces消息,templates,jsf,primefaces,messages,Templates,Jsf,Primefaces,Messages,问题: 我的Web应用程序是由多个片段和模板构建的。标题模板有一个“p:messages”来显示应用程序范围内的错误。除此之外,我还有一个内容模板来显示内容/正文 现在我有以下问题:我想在内容模板的组件下显示内容增值错误(例如,选择的日期错误等)。如果我发送facesmessage,它不仅会显示在内容的消息部分,还会显示在标题中: 目前只有两个组件需要验证: <p:calendar id="calendar1" value="#{doesn't matter}"> <

问题:

我的Web应用程序是由多个片段和模板构建的。标题模板有一个“p:messages”来显示应用程序范围内的错误。除此之外,我还有一个内容模板来显示内容/正文

现在我有以下问题:我想在内容模板的组件下显示内容增值错误(例如,选择的日期错误等)。如果我发送facesmessage,它不仅会显示在内容的消息部分,还会显示在标题中:

目前只有两个组件需要验证:

<p:calendar id="calendar1" value="#{doesn't matter}">
     <f:validateRequired></f:validateRequired>
</p:calendar>

<p:calendar id="calendar2" value="#{doesn't matter}">
     <p:ajax event="dateSelect" listener="#{onDateSelect}"
      partialSubmit="true" update="ContentMessages"/>
</p:calendar>
到目前为止我所尝试的:

  • 使用带有for=“calendar1”和for=“calendar2”的两个p:message标记。两个模板中仍然存在错误

  • 将我的“ContentMessages”与for标记一起使用:for=“calendar1 calendar2”。在标题中显示错误,而不是在内容中显示错误,仅当我为for标记使用单个组件id时,它将在两个模板中再次显示msg

我不能做的事:

  • 使用globalOnly=“true”
  • 仅为信息设置标题的严重性,并为错误和致命事件设置内容的严重性

由于我看不到模板的代码,我无法判断它们是否有问题,但primefaces中的目标消息应该没有问题

尝试通过删除不必要的代码来缩小问题范围

本例100%有效,每条消息只显示一次

<h:form id="form">
<p:messages for="somekey" />
<p:messages for="anotherkey" />

 <p:commandButton value="Message 1" id="m1" update="form" actionListener="#{playgroundController.addMessage1()}" styleClass="ui-priority-primary" />
 <p:commandButton value="Message 2" id="m2" update="form" actionListener="#{playgroundController.addMessage2()}" styleClass="ui-priority-primary" />

</h:form>
 FacesContext.getCurrentInstance().addMessage(componentClientId,
            new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error:","Error Text"));
<h:form id="form">
<p:messages for="somekey" />
<p:messages for="anotherkey" />

 <p:commandButton value="Message 1" id="m1" update="form" actionListener="#{playgroundController.addMessage1()}" styleClass="ui-priority-primary" />
 <p:commandButton value="Message 2" id="m2" update="form" actionListener="#{playgroundController.addMessage2()}" styleClass="ui-priority-primary" />

</h:form>
public void addMessage1() {
    FacesContext.getCurrentInstance().addMessage("somekey", new FacesMessage(FacesMessage.SEVERITY_INFO, "Sample info message", "Message 1"));
}


public void addMessage2() {
    FacesContext.getCurrentInstance().addMessage("anotherkey", new FacesMessage(FacesMessage.SEVERITY_INFO, "Sample info message 2", "Message 2"));
}