我想在 <p:dialog>
中显示来自支持 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>
组件验证后,但我不知道如何在验证失败后显示此对话框。我怎样才能做到这一点?
最佳答案
您可以使用 visible
<p:dialog>
的属性指定对话框是否应默认显示。您可以通过 FacesContext#isValidationFailed()
查询如果验证失败。
所以,简而言之:
<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" />
或者只是将它放在
<p:outputPanel autoUpdate="true">
中以便它在每个 ajax 请求上自动更新自己,而无需在每个 update
中指定它属性:<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>
也可以看看:
无关 对于具体问题,要覆盖非验证消息,例如您在操作方法中添加的那些全局消息,而是检查是否
FacesContext#getMessageList()
不是空的。<p:dialog ... visible="#{not empty facesContext.messageList}">
当有任何消息时,这将显示对话框。这样
RequestContext#execute()
打电话是不必要的。
关于validation - 在 p :dialog on validation failure 中自动显示验证消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12460572/