Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 如何在执行ajax命令时查找验证错误的指示(required=";true";)_Jsf 2 - Fatal编程技术网

Jsf 2 如何在执行ajax命令时查找验证错误的指示(required=";true";)

Jsf 2 如何在执行ajax命令时查找验证错误的指示(required=";true";),jsf-2,Jsf 2,我在对话框中有一个表单,我用ajax单击commandbutton关闭它 像这样 <h:commandButton value="Add" action="#{myBean.addSomething(false)}" id="add_something_id" > <f:ajax render="@form someTable" execute="@form" onevent="closeAddNewSomethingDialogIfSuccee

我在对话框中有一个表单,我用ajax单击commandbutton关闭它

像这样

<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>
在这里之前没有问题

现在我将一些对话框表单字段更改为
required=“true”
,现在我想阻止关闭“我得到了验证错误”对话框

但是ajax
data.status
仍然达到了它的
success
状态,我不知道可以挂接什么样的验证失败指示

有什么想法吗

多亏了巴卢斯克的回答,我做到了以下几点:

在JSF中,添加了:

    <h:panelGroup id="global_flag_validation_failed_render">
        <h:outputText id="global_flag_validation_failed" value="true" 
            rendered="#{facesContext.validationFailed}"/>
    </h:panelGroup>

我想你应该看看“素面”。这将帮助您在服务器端触发客户端代码。

不是专门针对
required=“true”
,但是您可以检查验证是否通常失败。如果将此功能与检查相关按钮是否被按下相结合,则可以将其放在的
rendered
属性中,如下所示:

<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>
或者,如果您碰巧使用了PrimeFaces,那么您可以利用PrimeFaces通过附加的
args.validationFailed
属性扩展ajax响应这一事实,该属性直接注入到
oncomplete
属性的JavaScript范围中:

<p:commandButton ... oncomplete="if (args &amp;&amp; !args.validationFailed) $('#dialog_id').dialog('close')" />
不需要条件检查,因为当验证失败时,bean的操作方法无论如何都不会被调用。

1) 正在检查“OneEvent”函数中是否存在错误

您肯定有必填字段的消息标记吗

<h:message id="m-my-field-id" for="my-field-id" errorClass="error-class"/>
2) DOM在成功方面不是最新的

是的,我可以在Firefox中看到页面上的消息,但是jQuery告诉我它不在那里

我发现使用尽可能小的超时时间就足以解决这个问题

setTimeout(
    function(){
    setErrorStyle(source.attr('id'));
    },
   1
);
@巴卢斯克

在您的示例代码中,按钮的clientId没有设置为param,因为它是一个AJAX请求。所以

not empty param[add.clientId] is always false.
但这是可行的:

param['javax.faces.source'] eq add.clientId
(使用jsf-impl-2.2.12.redhat-1进行测试)


问候

谢谢!最后,我使用了依赖于#{facesContext.validationFailed}(我不知道)的方法,我在简单outputext的渲染条件下使用了它。。。稍后在js代码中,我使用jquery.length检查了outputtext是否存在……不客气。有关JSF中隐式EL对象的概述,请参见。@BalusC facesContext.validationFailed是否也适用于转换失败?如果转换失败是真的吗?@Bren是的。根据JavaEE6FacesContext文档,“validationFailed()设置一个标志,指示在处理输入时发生转换或验证错误。”()注意,您不必使用&&;。。。你可以用“和”。。。
RequestContext.getCurrentInstance().execute("$('#dialog_id').dialog('close')");
<h:message id="m-my-field-id" for="my-field-id" errorClass="error-class"/>
var message = $('#m-my-field-id');

if(message.hasClass('error-class'){
    //do this
}
else{
  //do that
}
setTimeout(
    function(){
    setErrorStyle(source.attr('id'));
    },
   1
);
not empty param[add.clientId] is always false.
param['javax.faces.source'] eq add.clientId