我有一个有三个选项卡的AccordionPanel。在第一个选项卡中是一个包含所需输入文本的表单。现在我有一个问题,错误消息显示在所有三个选项卡中,而不是一个选项卡中。任何建议吗?如何为一个选项卡设置需要输入的错误信息?
<p:accordionPanel dynamic="true" cache="true">
<p:tab title="Change your details" id="tabDetails">
<p:messages id="message1" showDetail="true" autoUpdate="true" closable="true" />
<h:panelGrid columns="2" cellpadding="10" id="gridDetails">
<h:outputText value="First name: *" />
<p:inputText value="#{login.current.firstName}" id="firstName" required="true" />
<!-- ... -->
<p:commandButton value="save" actionListener="#{login.saveModifications}" update="gridDetails"/>
</h:panelGrid>
</p:tab>
<p:tab title="Change your password" id="tabPass">
<p:messages id="message2" showDetail="true" autoUpdate="true" closable="true"/>
<h:panelGrid columns="3" cellpadding="10" id="gridPass">
<!-- ... -->
<p:commandButton value="save" actionListener="#{login.changePassword}" update="gridPass" />
</h:panelGrid>
</p:tab>
<!-- ... -->
</p:accordionPanel>
谢谢你的帮助!
默认情况下,p:messages
显示来自视图的每个JSF消息。如果您只想显示特定的内容,则需要使用属性for
。
在你的情况下,这应该是正确的:
<p:accordionPanel dynamic="true" cache="true">
<p:tab title="Change your details" id="tabDetails">
<p:messages id="message1" for="btn1" showDetail="true" autoUpdate="true" closable="true" />
<h:panelGrid columns="2" cellpadding="10" id="gridDetails">
<h:outputText value="First name: *" />
<p:inputText value="#{login.current.firstName}" id="firstName" required="true" />
<!-- ... -->
<p:commandButton id="btn1" value="save" actionListener="#{login.saveModifications}" update="gridDetails"/>
</h:panelGrid>
</p:tab>
<p:tab title="Change your password" id="tabPass">
<p:messages id="message2" for="btn2" showDetail="true" autoUpdate="true" closable="true"/>
<h:panelGrid columns="3" cellpadding="10" id="gridPass">
<!-- ... -->
<p:commandButton id="btn2" value="save" actionListener="#{login.changePassword}" update="gridPass" />
</h:panelGrid>
</p:tab>
<!-- ... -->
</p:accordionPanel>
注意:我已经为你的动作组件(p:commandButton
)添加了特定的ID。
更多信息:
- <
- p:消息/gh>
- FacesMessages增强