问题:
我的 Web 应用程序是由多个片段和模板构建的。 Header-Template 有一个“p:messages”来显示应用程序范围的错误。除此之外,我还有一个内容模板来显示内容/正文。
现在我遇到了以下问题:我想在内容模板的组件下显示内容验证错误(例如选择了错误的日期等)。如果我发送一个面部消息,它不仅会显示在内容的消息部分,还会显示在标题中:
目前只有两个组件需要验证:
<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>
消息标签:
<p:messages id="GlobalMessages" showSummary="true" showDetail="false" closable="true" redisplay="false"/>
<p:messages id="ContentMessages" showDetail="true" autoUpdate="true"/>
我如何发送 FacesMessage:
FacesContext.getCurrentInstance().addMessage(componentClientId,
new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error:","Error Text"));
到目前为止我尝试了什么:
使用两个带有 for="calendar1"和 for="calendar2"的 p:message 标签。两个模板中仍然存在错误。
使用带有 for-tag 的“ContentMessages”:for="calendar1 calendar2"。在标题中显示错误,而不是在内容中显示错误,只有当我为 for-tag 使用单个组件 ID 时,它才会再次在两个模板中显示消息。
我不能做什么:
- 使用 globalOnly="true"。
- 仅为信息设置 header 的严重性,为错误和严重错误设置内容。
最佳答案
因为我看不到您模板的代码,所以我无法判断它们是否有问题,但 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>
bean 类:
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"));
}
关于templates - 模板中的多个 primefaces 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30910311/