繁体   English   中英

jQuery验证提交带有错误的Spring表单

[英]Jquery validation submitting spring form with errors

我正在对Spring表单使用jquery表单验证。 问题是,在我的某些表单中,即使表单有错误,提交仍在发生,并且我收到了讨厌的服务器错误。 在另一种形式中,它工作得很好,并且如果表单中存在字段级错误,则不会提交。

另外,我可以看到jquery验证规则没有应用于任何字段。 如果我用data-rule-*指定内联data-rule-*则看起来它正在运行。 但是表单仍然提交错误。

JSP

<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<jsp:include page="header.jsp"></jsp:include>
<jsp:include page="sidebar.jsp"></jsp:include>
<jsp:include page="topnav.jsp"></jsp:include>


<div class="app-content content">
    <div class="content-wrapper">

        <div class="content-body">
            <section id="number-tabs">
                <div class="row match-height">
                    <div class="col-md-12">
                        <div class="card">
                            <div class="card-header">
                                <h4 class="card-title text-center">
                                    <spring:message code="adddriver"></spring:message>
                                </h4>
                                <a class="heading-elements-toggle"><i
                                    class="fa fa-ellipsis-v font-medium-3"></i></a>
                                <div class="heading-elements">
                                    <ul class="list-inline mb-0">
                                        <li><a data-action="collapse"><i class="ft-minus"></i></a></li>
                                        <li><a data-action="reload"><i class="ft-rotate-cw"></i></a></li>
                                        <li><a data-action="expand"><i class="ft-maximize"></i></a></li>
                                        <li><a data-action="close"><i class="ft-x"></i></a></li>
                                    </ul>
                                </div>
                            </div>

                            <div class="card-content collapse show">
                                <div class="card-body">
                                    <c:url var="adddriver" value="/driver/save" />
                                    <form:form action="${adddriver}" id="adddriver"
                                        modelAttribute="driverForm"
                                        cssClass="number-tab-steps wizard-circle form form-horizontal"
                                        enctype="multipart/form-data">

                                        <h6>Profile</h6>
                                        <fieldset>


                                            <div class="form-body">
                                                <div class="form-group row">

                                                    <form:label path="driverProfileDTO.firstname"
                                                        cssClass="col-md-3 label-control">
                                                        <spring:message code="driver.firstname"></spring:message>
                                                        <span class="danger">*</span>
                                                    </form:label>
                                                    <div class="col-md-9">
                                                        <form:input  path="driverProfileDTO.firstname"
                                                            id="firstname" maxlength="15" placeholder="FirstName"
                                                            cssClass="form-control required" />
                                                    </div>
                                                </div>
                                                <div class="form-group row">

                                                    <form:label path="driverProfileDTO.middlename"
                                                        cssClass="col-md-3 label-control">
                                                        <spring:message code="driver.middlename"></spring:message>
                                                    </form:label>
                                                    <div class="col-md-9">
                                                        <form:input path="driverProfileDTO.middlename"
                                                            id="middlename" maxlength="15" placeholder="MiddleName"
                                                            cssClass="form-control" />
                                                    </div>
                                                </div>

                                                <div class="form-group row">
                                                    <form:label path="driverProfileDTO.lastname"
                                                        cssClass="col-md-3 label-control">
                                                        <spring:message code="driver.lastname"></spring:message>
                                                        <span class="danger">*</span>
                                                    </form:label>
                                                    <div class="col-md-9">
                                                        <form:input path="driverProfileDTO.lastname" id="lastname"
                                                            maxlength="15" placeholder="LastName"
                                                            cssClass="form-control required" />
                                                    </div>
                                                </div>

                                                <div class="form-group row">
                                                    <form:label path="driverProfileDTO.mobile"
                                                        cssClass="col-md-3 label-control">
                                                        <spring:message code="driver.mobile"></spring:message>
                                                        <span class="danger">*</span>
                                                    </form:label>
                                                    <div class="col-md-9">
                                                        <form:input data-rule-number="true" path="driverProfileDTO.mobile" id="mobile"
                                                            maxlength="10" placeholder="Mobile No"
                                                            cssClass="form-control required" />
                                                    </div>
                                                </div>


                                                <div class="form-group row">
                                                    <form:label path="driverProfileDTO.username"
                                                        cssClass="col-md-3 label-control">
                                                        <spring:message code="driver.username"></spring:message>
                                                        <span class="danger">*</span>
                                                    </form:label>
                                                    <div class="col-md-9">
                                                        <form:input path="driverProfileDTO.username" id="username"
                                                            maxlength="15" placeholder="Username"
                                                            cssClass="form-control required" />
                                                    </div>
                                                </div>

                                                <div class="form-group row">
                                                    <form:label path="driverProfileDTO.password"
                                                        cssClass="col-md-3 label-control">
                                                        <spring:message code="driver.password"></spring:message>
                                                        <span class="danger">*</span>
                                                    </form:label>
                                                    <div class="col-md-9">
                                                        <form:input path="driverProfileDTO.password"
                                                            type="password" id="password" maxlength="15"
                                                            placeholder="Password" cssClass="form-control required" />
                                                    </div>
                                                </div>

                                                <div class="form-group row">
                                                    <form:label path="driverProfileDTO.emailid"
                                                        cssClass="col-md-3 label-control">
                                                        <spring:message code="driver.emailid"></spring:message>
                                                        <span class="danger">*</span>
                                                    </form:label>
                                                    <div class="col-md-9">
                                                        <form:input date-rule-required="true" data-rule-emailExt="true" path="driverProfileDTO.emailid" id="emailid"
                                                            maxlength="30" placeholder="EmailId"
                                                            cssClass="form-control" />
                                                    </div>
                                                </div>





                                                <div class="form-group row">
                                                    <form:label path="driverProfileDTO.driverImage"
                                                        cssClass="col-md-3 label-control">
                                                        <spring:message code="driver.image"></spring:message>
                                                        <span class="danger">*</span>
                                                    </form:label>
                                                    <div class="col-md-9">
                                                        <form:input path="driverProfileDTO.driverImage"
                                                            type="file" cssClass="form-control" />
                                                    </div>

                                                </div>
                                            </div>

                                        </fieldset>







                                    </form:form>

                                </div>

                            </div>
                        </div>
                    </div>
                </div>
            </section>
        </div>
    </div>

    <!-- ############ Main END-->
</div>
<jsp:include page="footer.jsp"></jsp:include>
<script>
    $(function() {
        $(".number-tab-steps").steps({
            headerTag : "h6",
            bodyTag : "fieldset",
            transitionEffect : "fade",
            titleTemplate : '<span class="step">#index#</span> #title#',
            labels : {
                finish : 'Submit'
            },
            onFinished : function(event, currentIndex) {
                document.forms["adddriver"].submit();

            }
        });
    });
    $(document).ready(function() {
        jQuery.validator.addMethod("emailExt", function(value, element, param) {
            return value.match(/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}/igm);
        },'Invalid email id');  // this works after I use this inline with data-rule*
        $("#adddriver").validate({
            rules : { // These rules are either not getting applied
                "driverProfileDTO.firstname" : {// Tried this but also, but no luck
                    required : true
                },
                middlename : {
                    required : true
                },
                lastname : {
                    required : true
                },
                mobile : {

                    required : true
                },
                username : {
                    required : true
                },
                password : {
                    required : true
                }
            }
        });
    });
</script>

仅供参考,我将所有脚本都包含在单独的jsp(header.jsp)中,并且表单验证对于某些jsps正常,而对其他jsp则无效。

适用于以下jsp

<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<jsp:include page="header.jsp"></jsp:include>
<jsp:include page="sidebar.jsp"></jsp:include>
<jsp:include page="topnav.jsp"></jsp:include>


<div class="app-content content">
 <div class="content-wrapper">

  <div class="content-body">
   <div class="row match-height">
    <div class="col-md-12">
     <div class="card">
      <div class="card-header">
       <h4 class="card-title text-center">Add Rider</h4>
       <a class="heading-elements-toggle"><i class="fa fa-ellipsis-v font-medium-3"></i></a>
       <div class="heading-elements">
        <ul class="list-inline mb-0">
         <li><a data-action="collapse"><i class="ft-minus"></i></a></li>
         <li><a data-action="reload"><i class="ft-rotate-cw"></i></a></li>
         <li><a data-action="expand"><i class="ft-maximize"></i></a></li>
         <li><a data-action="close"><i class="ft-x"></i></a></li>
        </ul>
       </div>
      </div>

      <div class="card-content collapse show">
       <div class="card-body">
        <c:url var="addrider" value="/rider/save" />
        <form:form action="${addrider}" id="addrider" modelAttribute="riderForm" enctype="multipart/form-data" cssClass="form form-horizontal">



         <div class="form-body">
          <div class="form-group row">

           <form:label path="firstname" cssClass="col-md-3 label-control">
            <spring:message code="rider.firstname"></spring:message>
            <span class="danger">*</span>
           </form:label>
           <div class="col-md-9">
            <form:input path="firstname" id="firstname" maxlength="15" placeholder="FirstName" cssClass="form-control" required="true" />
           </div>
          </div>

          <div class="form-group row">

           <form:label path="middlename" cssClass="col-md-3 label-control">
            <spring:message code="rider.middlename"></spring:message>
            <span class="danger">*</span>
           </form:label>
           <div class="col-md-9">
            <form:input path="middlename" id="middlename" maxlength="15" placeholder="MiddleName" cssClass="form-control" />
           </div>
          </div>

          <div class="form-group row">
           <form:label path="lastname" cssClass="col-md-3 label-control">
            <spring:message code="rider.lastname"></spring:message>
            <span class="danger">*</span>
           </form:label>
           <div class="col-md-9">
            <form:input path="lastname" id="lastname" maxlength="15" placeholder="LastName" cssClass="form-control" required="true" />
           </div>
          </div>

          <div class="form-group row">
           <form:label path="username" cssClass="col-md-3 label-control">
            <spring:message code="rider.username"></spring:message>
            <span class="danger">*</span>
           </form:label>
           <div class="col-md-9">
            <form:input path="username" id="lastname" maxlength="15" placeholder="User Name" cssClass="form-control" required="true" />
           </div>
          </div>




          <div class="form-group row">
           <form:label path="password" cssClass="col-md-3 label-control">
            <spring:message code="rider.password"></spring:message>
            <span class="danger">*</span>
           </form:label>
           <div class="col-md-9">
            <form:input path="password" type="password" id="password" maxlength="15" placeholder="Password" cssClass="form-control" required="true" />
           </div>
          </div>

          <div class="form-group row">
           <form:label path="email" cssClass="col-md-3 label-control">
            <spring:message code="rider.email"></spring:message>
            <span class="danger">*</span>
           </form:label>
           <div class="col-md-9">
            <form:input path="email" id="email" placeholder="Email ID" maxlength="30" cssClass="form-control" required="true" />
           </div>
          </div>

          <div class="form-group row">
           <form:label path="mobile" cssClass="col-md-3 label-control">
            <spring:message code="rider.mobile"></spring:message>
            <span class="danger">*</span>
           </form:label>
           <div class="col-md-9">
            <form:input  path="mobile" id="mobile" placeholder="Mobile No" maxlength="10" cssClass="form-control" required="true" />
           </div>
          </div>
          <div class="form-group row">
           <form:label path="imageFile" cssClass="col-md-3 label-control">
            <spring:message code="rider.image"></spring:message>
            <span class="danger">*</span>
           </form:label>
           <div class="col-md-9">
            <form:input path="imageFile" id="imageFile" type="file" cssClass="form-control" />
           </div>

          </div>
          <div class="form-group row">
           <form:label path="" cssClass="col-md-3 label-control">
            <spring:message code="rider.imagepreview"></spring:message>
            <span class="danger">*</span>
           </form:label>
           <div class="col-md-9">
            <img id="img" alt="profile" style="width: 150px; border-radius: 50%;">
           </div>
          </div>

          <div class="form-group row">
           <form:label path="language" cssClass="col-md-3 label-control">
            <spring:message code="rider.language"></spring:message>
           </form:label>
           <div class="col-md-9">
            <form:select path="language" cssClass="form-control">
             <form:options items="${riderForm.localeChoices}" />
            </form:select>
           </div>
          </div>


         </div>

         <div class="form-actions center">

          <button type="submit" class="btn btn-primary">Submit</button>
         </div>
        </form:form>


       </div>

      </div>
     </div>
    </div>
   </div>
  </div>
 </div>

 <!-- ############ Main END-->
</div>
<script>
function readURL(input) {
    if (input.files && input.files[0]) {
        var reader = new FileReader();

        reader.onload = function(e) {
            $('#img').attr('src', e.target.result);
        }

        reader.readAsDataURL(input.files[0]);
    }
}
$("#imageFile").change(function() {
    readURL(this);
});

$(document).ready(function() {

    $("#addrider").validate({
        rules: {
            firstname: {
                required: true
            },
            middlename: {
                required: true
            },
            lastname: {
                required: true
            },
            password: {
                required: true
            },
            mobile: {
                required: true,
                digits:true

            },
            imageFile: {
                required: true
            },

        }
    });
});
</script>
<jsp:include page="footer.jsp"></jsp:include>

我认为对于具有多个步骤的表单,情况几乎没有什么不同。 表单提交的工作原理很少,但因这些原因有所不同,并且在提交表单之前通常不会调用validate方法。

请找到以下工作代码。 参考

$(function() {
            $(".number-tab-steps").steps({
                headerTag : "h6",
                bodyTag : "fieldset",
                transitionEffect : "fade",
                titleTemplate : '<span class="step">#index#</span> #title#',
                labels : {
                    finish : 'Submit'
                },
                onStepChanging: function (event, currentIndex, newIndex)
                {
                    form.validate().settings.ignore = ":disabled,:hidden";
                    return form.valid();
                },
                onFinishing: function (event, currentIndex)
                {
                    form.validate().settings.ignore = ":disabled";
                    return form.valid();
                },
                onFinished : function(event, currentIndex) {
                    document.forms["adddriver"].submit();

                }
            });
        });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM