2014-09-24 137 views
0

我创建了一个Spring MVC项目,但窗体的错误不显示。为什么?
我试图创建一个简单的form.This是我Project.The项目的作品,但在JSP中的错误都没有dispayed..Where我才出问题的代码?谢谢春天错误表单不显示

Student.java

package coreservlets; 

import javax.validation.constraints.NotNull; 
import javax.validation.constraints.Size; 

public class Student { 

@Size(min=4,max=5,message="Size wrong") 
@NotNull 
private String name; 
@Size(min=4,max=5,message="Size wrong") 
@NotNull 
private Integer age; 
@Size(min=4,max=5,message="Size wrong") 
@NotNull 
private Integer id; 

public String getName(){return name;}//getName 

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

public Integer getAge(){return age;}//getAge 

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

public Integer getId(){return id;}//getId 

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

}//Student 

StudentController.java

package coreservlets; 

import javax.validation.Valid; 

import org.springframework.stereotype.Controller; 
import org.springframework.ui.ModelMap; 
import org.springframework.web.bind.annotation.ModelAttribute; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.servlet.ModelAndView; 

@Controller 
public class StudentController { 

@RequestMapping(value="/",method=RequestMethod.GET) 
public ModelAndView student(){ 

    return new ModelAndView("student", "command", new Student()); 

}//student 

@RequestMapping(value="/addStudent", method=RequestMethod.POST) 
public String addStudent(@ModelAttribute @Valid Student student,ModelMap model){ 

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

    return "result"; 
}//addStudent 

}//StudentController 

student.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
pageEncoding="ISO-8859-1"%> 
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4 /loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Spring MVC Form Handling</title> 
</head> 
<body> 
<h2>Student Information</h2> 
<form:form method="post" action="/SpringMVCFormExample/addStudent" > 

<table> 
<tr> 
    <td><form:label path="name">Name</form:label></td> 
    <td><form:input path="name"/></td> 
    <form:errors path="name" /> 
</tr> 

<tr> 
    <td><form:label path="age">Age</form:label></td> 
    <td><form:input path="age"/></td> 
    <form:errors path="age" /> 
</tr> 

<tr> 
    <td><form:label path="id">Id</form:label></td> 
    <td><form:input path="id"/></td> 
    <form:errors path="id" /> 
</tr> 

<tr> 
    <td colspan="2"> 
     <input type="submit" value="Submit"/> 
    </td> 
</tr> 

</table> 
</form:form> 

result.jsp中

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
pageEncoding="ISO-8859-1"%> 
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Spring MVC Form Handling</title> 
</head> 
<body> 
<h2>Submitted Student Information</h2> 
<table> 
<tr> 
    <td>Name</td> 
    <td>${name}</td> 
</tr> 

<tr> 
    <td>Age</td> 
    <td>${age}</td> 
</tr> 

<tr> 
    <td>Id</td> 
    <td>${id}</td> 
</tr> 
</table> 

</body> 
</html> 

的web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 

<display-name>Spring MVC Form</display-name> 

<servlet> 
    <servlet-name>SpringMVCForm</servlet-name> 
    <servlet-class> 
     org.springframework.web.servlet.DispatcherServlet 
    </servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>SpringMVCForm</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 


</web-app> 

SpringMVCForm-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:mvc="http://www.springframework.org/schema/mvc" 
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd 
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd"> 

    <context:component-scan base-package="coreservlets" /> 

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

+1

而且又何必呢? YOu总是显示'result'页面。在'@ ModelAttribute'注释参数后面添加一个'BindingResult'类型的参数后,检查是否有错误,如果是这样的话,再次显示同一页面,如果不行的话。 – 2014-09-24 10:09:28

+0

我想要[link] http://postimg.org/image/grajjtiej/ 错误以红色显示 – Alex 2014-09-24 10:14:54

回答

0

以下代码将在发生验证错误时将用户返回到student表单。如果没有验证错误,result模板将显示

@RequestMapping(value="/addStudent", method=RequestMethod.POST) 
public String addStudent(@Valid Student student, BindingResult errors, Model model){ 
    if (errors.hasErrors()) { 
     return "student"; 
    } 
    model.addAttribute("name",student.getName()); 
    model.addAttribute("age",student.getAge()); 
    model.addAttribute("id",student.getId()); 

    return "result"; 
} 

你需要确保BindingResult errors之后@ModelAttribute @Valid Student student

退房thisthis教程更多的信息准确定位。

另一方面,您应该在成功发布POST后重定向用户。有关更多详细信息,请参阅this

+0

如果我写你的代码,我有这个错误: HTTP状态500 - 请求处理失败;嵌套异常是org.springframework.web.bind.annotation.support.HandlerMethodInvocationException:无法调用处理程序方法[public java.lang.String coreservlets.StudentController.addStudent(coreservlets.Student,org.springframework.ui.ModelMap,org.springframework .validation.BindingResult)];嵌套的异常是java.lang.IllegalStateException:声明的Errors/BindingResult参数没有先前的模型属性。检查你的处理器方法签名! – Alex 2014-09-24 10:35:31

+0

@Alex检查我的更新回答 – geoand 2014-09-24 11:03:31

0

如果设置在模型层,你的验证如果你想处理在客户端级别,你可以jquery.validate.js验证

@RequestMapping(value="/addStudent", method=RequestMethod.POST) 
    public String addStudent(@ModelAttribute @Valid Student student,ModelMap model,BindingResult errors){ 
    if (errors.hasErrors()) { 
       List<FieldError> lerr = errors.getFieldErrors(); 
       for (FieldError err: lerr) { 
        // manage the errorrs 
       } 
      } 
    model.addAttribute("name",student.getName()); 
    model.addAttribute("age",student.getAge()); 
    model.addAttribute("id",student.getId()); 

    return "result"; 
    } 

:应该使用BindingResult

+0

student.jsp中的标记不显示student.java中的注释错误消息。为什么? – Alex 2014-09-24 10:39:13

+0

你需要创建一个扩展'Validator'的StudentValidator,看看这个教程http://examples.javacodegeeks.com/enterprise-java/spring/mvc/spring-mvc-form-errors-tag-example/ – 2014-09-24 10:48:07

1

在您的方法中使用BindingResult类作为参数。 你的方法应该是这样的

公共字符串传递addStudent(@ModelAttribute @Valid学生的学生,ModelMap模型,BindingResult结果)

Spring MVC的将结合其属性后验证由@Valid注解模型对象来自使用Spring的表单标签的JSP表单的输入。任何约束违规将在BindingResult对象中暴露为错误,因此我们可以像这样检查控制器方法中的违规:

if(result。hasErrors()){

// form validation error 

}其他{

// form input is ok 

}

+0

我想在标签中显示student.jsp中的错误。 – Alex 2014-09-24 10:32:57

+0

标记呈现bindingResult的错误。要了解更多信息,您可以通过此链接http://www.java4s.com/spring-mvc/spring-mvc-annotation-jsr-303-bean-validation-with-valid-example/ – 2014-09-24 10:39:50