我想在<p:dialog>
组件中显示来自backing bean的验证消息和消息。在我的JSF页面中,我定义了以下对话框:
<p:dialog widgetVar="messageDialog" id="msgDialog" modal="true" appendToBody="true">
<h:form id="messageForm">
<p:messages id="messagesInDialog" />
<p:commandButton value="OK" onclick="messageDialog.hide()" />
</h:form>
</p:dialog>
在支持bean中附加一些消息后执行以下代码:
RequestContext.getCurrentInstance().execute("messageDialog.show()");
它工作正常。
但是,我还想在此对话框中显示bean验证消息。消息在验证后附加到<p:message>
组件,但我不知道如何在验证失败后显示此对话框。
我怎样才能做到这一点?
答案 0 :(得分:13)
您可以使用visible
的{{1}}属性来指定对话框是否应默认显示。如果验证失败,您可以FacesContext#isValidationFailed()
进行检查。
所以,简而言之:
<p:dialog>
(请注意,我通过<p:dialog id="msgDialog" widgetVar="messageDialog" modal="true" appendToBody="true"
visible="#{facesContext.validationFailed}">
<p:messages id="messagesInDialog" />
<p:button value="OK" onclick="messageDialog.hide()" />
</p:dialog>
简化了不必要的h:form
和p:commandButton
然后由以下内容更新:
p:button
或者只是将其放在<p:commandButton value="submit" update=":msgDialog" />
内,以便它在每个ajax请求上自动更新,而无需在每个<p:outputPanel autoUpdate="true">
属性中指定它:
update
无关具体问题,涵盖非验证消息,例如您在操作方法中添加的全局消息,而是检查FacesContext#getMessageList()
是否为空。< / p>
<p:outputPanel autoUpdate="true">
<p:dialog id="msgDialog" widgetVar="messageDialog" modal="true" appendToBody="true"
visible="#{facesContext.validationFailed}">
<p:messages id="messagesInDialog" />
<p:button value="OK" onclick="messageDialog.hide()" />
</p:dialog>
</p:outputPanel>
这将在出现任何消息时显示对话框。这种方式<p:dialog ... visible="#{not empty facesContext.messageList}">
调用是不必要的。