gpt4 book ai didi

jsf-2 - 如何在执行 ajax 命令时找到验证错误的指示(需要 ="true")

转载 作者:行者123 更新时间:2023-12-03 08:46:39 29 4
gpt4 key购买 nike

我在一个对话框中有一个表单,我通过单击带有 ajax 的命令按钮来关闭它,

像这样

<h:commandButton value="Add" action="#{myBean.addSomething(false)}"
id="add_something_id" >
<f:ajax render="@form someTable" execute="@form"
onevent="closeAddNewSomethingDialogIfSucceeded"></f:ajax>
</h:commandButton>

这是关闭对话框的js代码
    function closeAddNewSomethingDialogIfSucceeded(data) {
if(data.status === 'success') {
$("#dialog_id").dialog("close");
}
}

到这里为止没有问题...

现在我将一些对话框表单字段更改为 required="true"现在我想阻止关闭我收到验证错误的对话框...

但是ajax data.status仍然达到其 success state ,我不知道我可以 Hook 什么验证失败的迹象......

有任何想法吗?

感谢 BalusC 的回答,我做了以下事情:

在 JSF 中,添加:
    <h:panelGroup id="global_flag_validation_failed_render">
<h:outputText id="global_flag_validation_failed" value="true"
rendered="#{facesContext.validationFailed}"/>
</h:panelGroup>

f:ajax 改成
<f:ajax render="@form someTable global_flag_validation_failed_render"

并在js中添加了以下检查
if(data.status === 'success') {
if($("#global_flag_validation_failed").length === 0){
$("#dialog_id").dialog("close");
}
}

最佳答案

不是专门针对 required="true" , 但您可以通过 #{facesContext.validationFailed} 查看如果验证通常失败。如果您将此与检查相关按钮是否被 #{not empty param[buttonClientId]} 按下相结合,那么你可以把它放在rendered <h:outputScript> 的属性如下:

<h:commandButton id="add_something_id" binding="#{add}" value="Add" action="#{myBean.addSomething(false)}">
<f:ajax execute="@form" render="@form someTable" />
</h:commandButton>
<h:outputScript rendered="#{not empty param[add.clientId] and not facesContext.validationFailed}">
$("#dialog_id").dialog("close");
</h:outputScript>

(请注意,您需要确保脚本也被 f:ajax 重新渲染)

有点hacky,但无法在 onevent 中处理它作为标准 JSF 实现的函数不提供有关 ajax 响应中的验证状态的任何信息。

如果您碰巧使用 RichFaces,那么您可以在 oncomplete 中使用 EL <a4j:xxx> 的属性命令按钮/链接。即基于每个请求而不是标准 JSF 和 PrimeFaces 中基于每个 View 对它们进行评估:
<a4j:commandButton ... oncomplete="if (#{!facesContext.validationFailed}) $('#dialog_id').dialog('close')" />

或者,如果您碰巧使用 PrimeFaces,那么您可以利用 PrimeFaces 通过额外的 args.validationFailed 扩展 ajax 响应这一事实。直接在 oncomplete 的 JavaScript 范围内注入(inject)的属性属性:
<p:commandButton ... oncomplete="if (args &amp;&amp; !args.validationFailed) $('#dialog_id').dialog('close')" />

(注意 &amp; 被用来代替 & ,因为 & 是 XML/XHTML 中的特殊字符)

或者您可以使用 PrimeFaces 的 RequestContext bean 的操作方法中的 API 以编程方式在呈现的 View 中执行 JavaScript。
RequestContext.getCurrentInstance().execute("$('#dialog_id').dialog('close')");

不需要条件检查,因为当验证失败时无论如何都不会调用 bean 的操作方法。

关于jsf-2 - 如何在执行 ajax 命令时找到验证错误的指示(需要 ="true"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9617914/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com