弹出错误表单未显示

时间:2014-09-24 09:55:02

标签: spring spring-mvc java-ee

我创建了一个Spring MVC项目,但没有显示表单错误。为什么? 我尝试创建一个简单的表单。这是我的项目的代码。项目工作,但在jsp错误没有发生..我哪里出错了?谢谢

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" />

3 个答案:

答案 0 :(得分:1)

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

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

Spring MVC将在使用Spring的表单标签的JSP表单的输入绑定其属性之后验证由@Valid注释注释的模型对象。任何约束违规都将作为BindingResult对象中的错误公开,因此我们可以像这样检查控制器方法中的违规:

if(result.hasErrors()){

// form validation error

}其他{

// form input is ok

}

答案 1 :(得分:0)

如果您在模型级别设置验证,则应使用BindingResult

 @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";
    }

如果您想在客户端级别处理验证,可以jquery.validate.js

答案 2 :(得分: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