2013-10-14 3 views
0

Я новичок весной mvc.I создали пример приложения, которое создает форму с полями Имя, возраст, метод ID.Controller являетсяSpring MVC исключение при проверке формы с помощью аннотаций

@RequestMapping(value = "/", method = RequestMethod.GET) 

     public ModelAndView student() { 
      return new ModelAndView("home", "command", new Student()); 
     } 
    @RequestMapping(value = "/addStudent", method = RequestMethod.POST) 
    public String addStudent(@Valid Student student,BindingResult result, Model model) { 

     if(result.hasErrors()) { 
      return "home"; 
     } 

     model.addAttribute("name", student.getName()); 
     model.addAttribute("age", student.getAge()); 
     model.addAttribute("id", student.getId()); 

     return "result"; 
    } 

Моя модель класса Student.java

public class Student { 
    private Integer age; 
    @NotEmpty @Email 
    private String name; 
    private Integer id; 

    public void setAge(Integer age) { 
     this.age = age; 
    } 
    public Integer getAge() { 
     return age; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
    public String getName() { 
     return name; 
    } 

    public void setId(Integer id) { 
     this.id = id; 
    } 
    public Integer getId() { 
     return id; 
    } 
} 

он отлично работает, когда я поступил правильно данные, электронный идентификатор, но это дает исключение, когда я Введите недопустимый адрес электронной почты или NULL. Вместо того, чтобы давать ошибку Он должен отображать соответствующее сообщение об ошибке. Мой взгляд Home.jsp является

<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 
<html> 
    <head> 
     <title>Spring MVC Form Handling</title> 
    </head> 
    <body> 

     <h2>Student Information</h2> 
     <form:form method="POST" action="/controller/addStudent" > 
      <table> 
       <tr> 
        <td><form:label path="name">Name</form:label></td> 
        <td><form:input path="name" /></td> 
        <form:errors path="name" >Invalid Name</form:errors> 
       </tr> 
       <tr> 
        <td><form:label path="age">Age</form:label></td> 
        <td><form:input path="age" /></td> 
       </tr> 
       <tr> 
        <td><form:label path="id">id</form:label></td> 
        <td><form:input path="id" /></td> 
       </tr> 
       <tr> 
        <td colspan="2"><input type="submit" value="Submit"/></td> 
       </tr> 
      </table> 
     </form:form> 
    </body> 
</html> 

Исключение:

org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/views/home.jsp at line 12 

9: <form:form method="POST" action="/controller/addStudent" > 
10: <table> 
11:  <tr> 
12:   <td><form:label path="name">Name</form:label></td> 
13:   <td><form:input path="name" /></td> 
14:   <form:errors path="name" >Invalid Name</form:errors> 
15:  </tr> 

первопричиной

java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'command' available as request attribute 
+1

вы аннотированное имя с @Email это ошибка typo? –

+0

для тестирования Я дал аннотацию @Email для имени. –

+0

Пожалуйста, напишите исключение, которое вы получите. – david99world

ответ

2

Student student Annotate с @ModelAttribute:

public String addStudent(@ModelAttribute @Valid Student student,BindingResult result, 
     Model model) 

EDIT:

Изменение new Student() имя атрибута, как student (потому что это будет более удобным для чтения, если вы звоните в Student как «студент»):

@RequestMapping(value = "/", method = RequestMethod.GET) 
    public ModelAndView student() { 
      return new ModelAndView("home", "student", new Student()); 
    } 

И изменить метод post контроллера, как это:

public String addStudent(@ModelAttribute("student") @Valid Student student,BindingResult result, Model model) 

Теперь измените form вашего home.jsp:

<form:form method="POST" action="/controller/addStudent" modelAttribute="student"> 
+0

Еще одна проблема –

+0

у вас есть какой-то метод контроллера, с помощью которого вы показываете эту страницу пользователю. Правильно? вы можете отредактировать свой вопрос с помощью этого кода метода. –

+0

Я обновил код с помощью метода GET –

Смежные вопросы