【问题标题】:How to trigger args.validationFailed in PrimeFaces oncomplete如何在 PrimeFaces oncomplete 中触发 args.validationFailed
【发布时间】:2013-01-02 07:47:13
【问题描述】:

当按下Save 按钮时,应该验证来自actionsDialog 的数据。如果所需信息已输入且有效,则会显示名为 reasonDialog 的第二个对话框。

已保存对象的非 JSF 验证是通过返回错误消息列表的方法完成的。如果验证失败,错误消息将与 FacesMessage 一起显示。我应该如何在objectsBean.validate 中触发oncomplete 的 if else 子句?

<p:dialog id="actionsDialog" widgetVar="actionsDialog" dynamic="true" 
    resizable="false" width="800" modal="true">
    <ui:include src="/WEB-INF/flows/custom-flow/genericObject.xhtml"/>
    <f:facet name="footer">
        <p:commandButton value="Save" update="msgs"
            oncomplete="if (args.validationFailed) {reasonDialog.hide()} else {reasonDialog.show()}"
            actionListener="#{objectsBean.validate}"/>
        <p:commandButton value="Cancel" immediate="true" oncomplete="actionsDialog.hide()" />
    </f:facet>
</p:dialog>

【问题讨论】:

    标签: validation jsf primefaces


    【解决方案1】:

    如果使用 JSF 内置的验证工具(即只使用以通常方式抛出 ValidatorException 并在其中包含所需面孔消息的验证器)出于某种原因确实不是一个选项(我真的会三思而后行,不,三次关于解决 JSF 验证工具的问题),那么您始终可以使用 FacesContext#validationFailed() 向 JSF 发出验证通常失败的信号,这正是当 ValidatorException 被捕获时 JSF 验证工具在幕后所做的事情。

    FacesContext.getCurrentInstance().validationFailed();
    

    【讨论】:

    • 要么我这样做要么抛出异常,JSF 生命周期继续,它更新模型值并调用应用程序。验证失败时有没有办法停止页面的渲染?
    • @Mounir:这不是正常行为。只需按照此处stackoverflow.com/tags/jsf/info 的说明提出问题,这样我们就可以观察、调试和确定您的问题,以防您无法胜任该任务。
    • 到目前为止我的行为相同,我在 primafces 命令按钮版本 5.3,JSF 2 的 actionListner 中调用了 FacesContext#validationFailed()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    • 1970-01-01
    • 2015-04-16
    相关资源
    最近更新 更多