簡體   English   中英

使用AJAX的Spring 4.0表單驗證問題

[英]Spring 4.0 form validation issue using AJAX

我在使用jQuery和spring 4進行服務器端表單驗證時遇到問題。每次“結果”(BindingResult的對象)出現零錯誤結果時。

下面,我證明我的代碼可以更好地理解。 我的jsp代碼是

  <div class="registerForm">
                      <div class="modal-header">
                        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                        <h4 class="modal-title" id="myModalLabel">Please Register</h4>
                      </div>
                      <div class="modal-body">
                            <form class="form-signin" id="regForm" commandName="userRegister">
                                <div class="reg-error error"></div><div class="reg-success success"></div>
                                <input type="text" name="username" class="input-block-level" placeholder="Username">
                                <input type="text" name="emailAddress" class="input-block-level" placeholder="Email address">
                                <input type="text" name="confirmEmailAdd" class="input-block-level" placeholder="Confirm Email address">
                                <input type="password" name="password" class="input-block-level" placeholder="Password">
                            </form>
                      </div>
                      <div class="modal-footer">
                        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                        <button type="button" class="btn btn-primary submitRegister">Register</button>
                      </div>
                  </div>

我的腳本代碼是

 $.ajax({
                url: "${pageContext.request.contextPath}/register",    
                data: $('#regForm').serialize(), 
                type: "POST",
                success: function(result) {},
                error: function(XMLHttpRequest, textStatus, errorThrown){}
            });

我的控制器代碼是

@RequestMapping(value="/register", method = RequestMethod.POST)
    public @ResponseBody 
    ValidationResponse register(Model model, @ModelAttribute("userRegister") @Valid UserRegister userReg, BindingResult result) {
        ValidationResponse res = new ValidationResponse();

        if(result.hasErrors()){
            res.setStatus("FAIL");
            List<FieldError> allErrors = result.getFieldErrors();
            List<ErrorMessage> errorMesages = new ArrayList<ErrorMessage>();
            for (FieldError objectError : allErrors) {
                errorMesages.add(new ErrorMessage(objectError.getField(), objectError.getField() + "  " + objectError.getDefaultMessage()));
            }
            res.setErrorMessageList(errorMesages);

        } else {
            res.setStatus("SUCCESS");
        }
        return res;
    }

我的豆對象

public class UserRegister {

    @NotEmpty @NotNull
    private String username;

    @NotEmpty @NotNull
    private String password;

    @NotEmpty @Email @NotNull
    private String emailAddress;

setter and getters....
}

我是否需要做任何其他配置或其他事情才能正確驗證它?

APP-servlet.xml中

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="
http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                        http://www.springframework.org/schema/context
                        http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.1.xsd">


    <context:property-placeholder location="classpath:database.properties" />
    <context:component-scan base-package="com.app" />

    <tx:annotation-driven transaction-manager="hibernateTransactionManager"/>

    <bean id="myAuthenticationSuccessHandler" class="com.app.security.handler.MySimpleUrlAuthenticationSuccessHandler" />
    <bean id="myAuthenticationFailureHandler" class="com.app.security.handler.MySimpleUrlAuthenticationFailureHandler" />

    <bean id="jspViewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass"
            value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${database.driver}" />
        <property name="url" value="${database.url}" />
        <property name="username" value="${database.user}" />
        <property name="password" value="${database.password}" />
    </bean>

    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
                <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>             
            </props>
        </property>
    </bean>

    <!-- bind your messages.properties
    <bean class="org.springframework.context.support.ResourceBundleMessageSource"
        id="messageSource">
        <property name="basename" value="messages" />
    </bean>
         -->
</beans>

具有屬性(用戶名,電子郵件等)字段的userReg模型對象是否已提交到服務器?

否則,表單字段可能無法正確綁定到模型對象

嘗試

 <form:form action="register" method="post" commandName="userRegister">

另外,輸入字段需要具有到模型對象的映射

<form:input path="username" /> 

還要確保在上下文文件中設置了

<mvc:annotation-driven />

這是一個演示: http : //www.codejava.net/frameworks/spring/spring-mvc-form-validation-example-with-bean-validation-api

還要確認pom.xml中存在驗證器jar

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
</dependency>

要么

<dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-validator</artifactId>
   <version>5.0.1.Final</version>
</dependency>

您能否列出spring xml配置文件(其中包含以下行的文件)?

 <mvc:annotation-driven />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM