Javascript 当字段验证失败时,避免AJAX onsuccess调用

Javascript 当字段验证失败时,避免AJAX onsuccess调用,javascript,ajax,validation,jsf,primefaces,Javascript,Ajax,Validation,Jsf,Primefaces,我打算在我的网站上建立一个向导。和每个向导一样,它也有步骤。对于每一步,您可以前进或后退到上一步。我正在使用ajax处理这些步骤中的导航。每个步骤都是在一个div上定义的。每个步骤都有相同的类,并且有一个唯一的id指示该步骤。因此,为了导航,我定义了以下js函数,其中的参数是要显示的步骤的id function navigateStepWizard(id) { //hide all steps $('.wizard-step').hide(); /

我打算在我的网站上建立一个向导。和每个向导一样,它也有步骤。对于每一步,您可以前进或后退到上一步。我正在使用ajax处理这些步骤中的导航。每个步骤都是在一个div上定义的。每个步骤都有相同的类,并且有一个唯一的id指示该步骤。因此,为了导航,我定义了以下js函数,其中的参数是要显示的步骤的id

function navigateStepWizard(id) {
        //hide all steps
        $('.wizard-step').hide();
        //show proper step
        $(id).fadeIn("fast");
        return false;
}
现在,我面临的问题是,在其中一个步骤中,我有几个字段必须在进入下一步之前进行验证。我已经为表单上的每个字段定义了验证器(FacesValidator类),当尝试转到下一步时,这些字段将被执行,并返回相应的Ok/错误消息。我的问题是,当此字段不正确时,按钮会转到下一步。首先,我尝试使用总是执行js函数的
oncomplete
,因此我改为
onsuccess
,认为当验证不正常时,ajax回调不会执行
onsuccess
js函数,但它会。。。这是我的按钮代码

<p:commandLink id="go-to-step-X" 
               actionListener="#{myBean.submitWizardInfo}" 
               onsuccess="navigateStepWizard('#wizard-step-X');" 
               process="@form, @([id$=wizzard])" 
               update="@form, @([id$=wizzard])">
    Go to next step...                                    
</p:commandLink>

转到下一步。。。
有没有一种方法可以在字段不正常时避免
onsuccess
AJAX调用?谢谢你的时间


我正在使用JSF2.0和PrimeFaces5.0

服务器必须使用200范围内的状态代码响应onSuccess回调。如果验证有问题,请确保响应代码在400范围内。这样就不会调用onSuccess函数。

谢谢您的提示!我将强制验证方法。有没有关于如何在JSF上实现这一点的好教程或指南?这个堆栈溢出回答:虽然这个回答回答了OP实际提出的问题(跳过
onsuccess
),但这个回答实际上只会让事情变得更糟。ajax响应根本不会被处理。不会进行部分更新。不会显示任何验证消息。这绝对不是OP的意图。这只是一个典型的例子。一旦你确定了答案,为OP实际需要的东西提出了正确的建议,我将取消否决票。我已经实施了这个建议,正如@BalusC刚刚发布的,这没有起作用。实际上,它避免了onsuccess调用,但是没有显示验证消息。尝试了一种不同的方法,我在我的支持bean上设置了一个标志,该标志仅在验证正常(在actionListener上)时设置为true,向导应该转到下一步。除此之外,我还定义了一个if on onsuccess,用于检查此标志以执行隐藏和显示propper步骤的js函数。当取消屏蔽时,很少会执行actionListener并将标志设置为true,但onsuccess js fun不会执行Just do
onsuccess=“if(args&;!args.validationFailed){NavigateStespWizard('#wizard-step-X')}”
,而不是采取繁琐的方式。