【问题标题】:Avoid AJAX onsuccess call, when field validation fails当字段验证失败时,避免 AJAX onsuccess 调用
【发布时间】:2015-01-13 16:20:05
【问题描述】:

我打算在我的网站上构建一个向导。像每个向导一样,它有步骤。对于每一步,您都可以前进或后退到上一步。我正在使用 ajax 处理步骤之间的导航。每个步骤都在一个 div 上定义。每个步骤都具有相同的类,以及一个指示步骤的唯一 ID。因此,为了导航,我定义了以下 js 函数,其参数是要显示的步骤的 id。

function navigateStepWizard(id) {
        //hide all steps
        $('.wizard-step').hide();
        //show proper step
        $(id).fadeIn("fast");
        return false;
}

现在,我面临的问题是,在其中一个步骤中,我有几个字段必须在进行下一步之前进行验证。我已经为表单上的每个字段定义了验证器(Faces Validator Classes),这些字段在尝试进入下一步时正在执行,并返回适当的 Ok/Error 消息。我的问题是,当此字段不正确时,按钮会转到下一步。首先,我尝试使用始终执行 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 调用?感谢您的宝贵时间!

P.D:我正在使用 JSF 2.0 和 PrimeFaces 5.0。

【问题讨论】:

  • 只做onsuccess="if(args &amp;amp;&amp;amp; !args.validationFailed) {navigateStepWizard('#wizard-step-X');}",而不是采取繁琐的方式。

标签: javascript ajax validation jsf primefaces


【解决方案1】:

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

【讨论】:

  • 感谢您的提示!我将在验证方法上强制执行此操作。是否有任何机会,关于如何在 JSF 上执行此操作的好教程或指南?
  • 这个堆栈溢出答案:stackoverflow.com/questions/11428686/…
  • 虽然这个答案回答了 OP 实际提出的问题(跳过 onsuccess),但这个答案实际上只会让事情变得更糟。根本不会处理 ajax 响应。不会发生部分更新。不会显示任何验证消息。这绝对不是OP的意图。这只是XY-problem 的经典案例。一旦您确定答案以针对 OP 实际需要的内容提出正确的方法,我将删除反对票。
  • 我已经实施了这个建议,正如@BalusC 刚刚发布的那样,这没有奏效。实际上它避免了 onsuccess 调用,但是没有显示验证消息。尝试了一种不同的方法,我在我的支持 bean 上设置了一个标志,只有在验证正常时才设置为 true(在 actionListener 上)并且向导应该进入下一步。除此之外,我还定义了一个 if onsuccess 来检查这个标志以执行隐藏和显示 propper 步骤的 js 函数。很少在调试时执行 actionListener 并且 flag 设置为 true,但是 onsuccess js fun 不执行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-25
  • 1970-01-01
相关资源
最近更新 更多