在验证失败时在p:对话框中自动显示验证消息

时间:2012-09-17 13:44:33

标签: validation jsf dialog primefaces

我想在<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>组件,但我不知道如何在验证失败后显示此对话框。

我怎样才能做到这一点?

1 个答案:

答案 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:formp: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}"> 调用是不必要的。