为什么在表单提交之前不显示null错误消息?

时间:2015-02-20 08:22:33

标签: spring forms spring-mvc

我在Spring中使用注释创建了基本表单验证。由于未知原因,它在提交表单之前显示我在User类中指定的NotNull错误消息。有什么想法吗?

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="springForm" %>
<%@ page session="false" %>
<html>
<head>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <title>Home</title>
</head>
<body>

<springForm:form method="POST" action="#" commandName="user" >
      <table>
          <tr>
              <td>UserName:</td>
              <td><springForm:input path="userName" /></td>
          <td><springForm:errors path="userName" /></td>
      </tr>          
      <tr>
          <td colspan="2">
              <input type="submit" name="submit" value="Save Changes" />
          </td>
      </tr>
  </table>
 </springForm:form>
</body>
</html>



package com.journaldev.spring;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Past;
import javax.validation.constraints.Size;

public class User {

    private int id;

    @NotNull @Size(min=2, max=30) 
private String userName;

public String getUserName() {
    return userName;
}

public void setUserName(String userName) {
    this.userName = userName;
}

    public User(){

    }

}





package com.journaldev.spring;


import javax.validation.Valid;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

    /**
     * Handles requests for the application home page.
     */
    @Controller
    public class HomeController {

    private static final Logger logger = LoggerFactory.getLogger(HomeController.class);

/**
 * Simply selects the home view to render by returning its name.
 */
        @RequestMapping(value = "/", method = {RequestMethod.GET, RequestMethod.POST})
    public String home(Model model, @Valid User user,
        BindingResult bindingResult) {                


        return "home";
    }

        @RequestMapping(value = "/login", method = RequestMethod.GET)
        public String loginPage(Locale locale, Model model) {
        return "login";
        }

        @RequestMapping(value = "/home", method = RequestMethod.POST)
        public String login(@Validated User user, Model model) {
        model.addAttribute("userName", user.getUserName());
        return "user";
    }
    }

1 个答案:

答案 0 :(得分:0)

对于使用@Valid和BindingResult的GET和POST,您在“/”上使用相同的方法。为GET创建单独的方法,不需要那些你不需要的参数。