validation - 在 p :dialog on validation failure 中自动显示验证消息

标签 validation jsf dialog primefaces

我想在 <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:formp: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>

也可以看看:
  • Difference between rendered and visible attributes of <p:dialog>


  • 无关 对于具体问题,要覆盖非验证消息,例如您在操作方法中添加的那些全局消息,而是检查是否 FacesContext#getMessageList() 不是空的。
    <p:dialog ... visible="#{not empty facesContext.messageList}">
    

    当有任何消息时,这将显示对话框。这样RequestContext#execute()打电话是不必要的。

    关于validation - 在 p :dialog on validation failure 中自动显示验证消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12460572/

    相关文章:

    c# - 验证设计模式

    javascript - js 提示验证三个单词之一

    java - jsf向flex传递参数

    android - 显示对话框时, Activity 中的外部编辑文本不显示 android 中的软键盘

    javascript - 监听window onresize,不包括jquery dialog的onresize

    java - 从 Internet 加载数据时显示进度对话框

    macos - Mac App Store 应用内购买的在线收据验证

    Php 只有数字验证功能

    jsf - 如何计算p :dataTable Primefaces?中的行数

    java - 添加此 ActionListener 时出现错误