jquery处理服务器端错误

时间:2016-07-27 14:20:07

标签: java jquery jsp jquery-validate

如何使用Jquery处理服务器端错误? 这是我的情景。我最初必须验证我的JSO表格。为此我从jquery使用.validate()。完成所有这些验证后,当我点击提交时,我必须验证userIdpwd字段。如果成功,我转到确认页面保留在同一页面并显示内联错误。为实现此目的,我不想重新加载,但希望使用jquery / ajax选项。我尝试了以下代码,但它不起作用。

     jQuery(document).ready(function () {
        //...


        ..//

        $("#aID").validate({
                rules: {
                    reason: "required",
                    aic: "required",
    pwd: {
required: true,
            remote: function() { 
                 remote: {
                    url: "${pageContext.request.contextPath}/tax/pwdChkAjax.do",
                    dataType: "post",
                    data: {
                        pwd: function() {
                               return $("#pwd").val();
                           }
                    },
                    success: function(data) {
                            alert("111");
                        }
                    }
                }

                },
                messages: {
                    reason:"Please select a reason code.",
                    aic: "Please select a credit AIC."
                },
                submitHandler: function(form) {
                    if (aLen.length == 0)) {
                        $('#pDiv').text('Please enter password.');   
                        $("#pwd").focus();  
                        return false;
                    }

                     var options = {
                        url: "${pageContext.request.contextPath}/abc/aTax.do",
                        beforeSubmit: function (data, set, options) {  
                            alert("Inside beforesubmit");          
                        },
                        success: function (param1, param2, param3) {            
                        },
                        error: function (param1, param2, param3) 
                        {   
                        alert(param3);
                                if (param3 == "Unauthorized") 
                                    $('#aDiv').text('Invalid Password');
                                if (param3 == "Forbidden") 
                                $('#cDiv').text('Invalid 2nd Password');

                        }
                    };        
                    // submit the form
                    $(form).ajaxSubmit(options);
                    return false;
                }
            }); 
         });

         <form:form id="aID" action="aTax.do" commandName="aForm">
         <DIV class="btn-group">
                <button id="submitId"  type="submit" class="defaultButton">Submit
                </button>
                <button id="resetId"  
                    type="reset" class="defaultButton">Reset
                </button>
            </DIV>
        </form:form>

控制器类

     @RequestMapping(value="/abc/aTax.do", method=RequestMethod.POST) 
        public String aTax(@Valid aForm command, BindingResult result, 
                 Model model, HttpServletRequest request , HttpServletResponse response) throws Exception {  

         //...
         pwdAuthenticate();
         ..//
         return "aTaxConfirm";       
        }

    private void authenticateUser(User user, AForm aForm, HttpServletResponse response) throws Exception
    {
    try{
     userAuthenticateService.authenticateUser(aForm.getId(), aForm.getPwd());
    }catch(AException e) {
                    System.out.println("Exception is ...."+e);      
                        response.setStatus(HttpServletResponse.SC_FORBIDDEN);

                }
    } 

@RequestMapping(value="tax/pwdChkAjax.do", method=RequestMethod.POST)
    private Boolean pwdChkAjax(String pwd, HttpServletResponse response) throws Exception
    {

        try{
            userAuthenticate.authenticate("abc", pwdOverride);
} catch (AuthenticationException e) {

                return false;
            }
            return true;
    }

映射:

<definition name="aTaxConfirm" extends="baseTransLayout" >
             <put-attribute name="heading" value="Tax Confirmation" />
             <put-attribute name="body" value="/WEB-INF/view/jsp/abc/aTaxConfirm.jsp" />
      </definition> 

1 个答案:

答案 0 :(得分:0)

你有一个迷路的大括号。

$("#aID").validate({
    rules: {
        reason: "required",
        aic: "required"
            } // <- REMOVE THIS
    },
    messages: {
        reason:"Please select a reason code.",
        aic: "Please select a credit AIC."
    }, 
    ....

这应该给你一个控制台错误。

  

完成所有这些验证后,当我点击提交时,我必须验证userId和pwd字段。

为什么验证完成后?您应该使用the remote method来验证userIdpwd字段以及所有其他字段验证。

根据此评论进行编辑以回应“究竟做什么”不起作用“是什么意思?”

  

我的意思是验证工作正常,userId和pwd验证也会发生。 Controller返回视图。我将更新控制器代码。完成后,页面不会呈现,只是保持提交。

那是因为您的submitHandler代码未提交表单。它只是通过Ajax提交登录凭据。每当您使用submitHandler选项时,您完全屏蔽并覆盖action属性设置的默认form网址。

如果您采用以前的建议并使用remote方法评估登录凭据以及其他字段,则可以完全删除submitHandler

将发生以下情况:

  1. 根据规则验证所有字段。使用remote规则的登录名和密码字段将通过Ajax自动评估。

  2. 当表单通过验证时,它会根据您的action属性正常“提交”,并且该页面将重新加载到此action网址,并根据您的脚本显示您的视图这个网址。

  3. 关于remote方法的说明:

    • 服务器响应必须是有效的JSON。没有例外。
    • 如果服务器响应为true,则此字段将通过验证。
    • 如果服务器响应为falseundefinednull,则此字段将无法通过验证,并将使用默认验证错误消息。
    • 如果服务器响应是字符串,则此字段将失败验证并且此字符串将成为验证错误消息。