如何在 PrimeFaces oncomplete 中触发 args.validationFailed

Posted

技术标签:

【中文标题】如何在 PrimeFaces oncomplete 中触发 args.validationFailed【英文标题】:How to trigger args.validationFailed in PrimeFaces oncomplete 【发布时间】: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"  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>

【问题讨论】:

【参考方案1】:

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

FacesContext.getCurrentInstance().validationFailed();

【讨论】:

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

以上是关于如何在 PrimeFaces oncomplete 中触发 args.validationFailed的主要内容,如果未能解决你的问题,请参考以下文章

将数据从对话框添加到datable-jsf-primefaces

Reactjs 如何在 formik 中使用 onCompleted() 传递值

仅当验证成功时如何执行 a4j:commandLink oncomplete?

如何在Flux的onComplete执行后返回一个Mono?

Primefaces:如何在 primefaces 3.5 中为菜单栏设置粘性

Primefaces:如何更改日历字段按钮上的默认图标?