Jsf 2 如何在执行ajax命令时查找验证错误的指示(required=";true";)
我在对话框中有一个表单,我用ajax单击commandbutton关闭它 像这样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
<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”
,现在我想阻止关闭“我得到了验证错误”对话框
但是ajaxdata.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 && !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