Spring MVC Hibernate驗證器
阿新 • • 發佈:2018-08-22
學生 taglib inpu pub ips int css 方法 顯示
下面的示例演示如何使用Spring Web MVC框架在表單中使用錯誤處理和驗證器。 首先使用Eclipse IDE,並按照以下步驟使用Spring Web Framework開發基於動態表單的Web應用程序:
- 創建一個名稱為 HibernateValidator 的動態WEB項目。
- 在
com.yiibai.springmvc
包下創建三個Java類:Student
和StudentController
。 - 在
jsp
子文件夾下創建兩個視圖文件:addStudent.jsp
,result.jsp
。 - 下載Hibernate Validator庫 - Hibernate Validator。解壓縮
hibernate-validator-5.3.4.Final.jar
CLASSPATH
中。 - 在
src
文件夾下創建屬性文件messages.properties
。 - 最後一步是創建所有源和配置文件的內容並運行應用程序,詳細如下所述。
完整的項目文件目錄結構如下所示 -
Student.java 的代碼如下所示 -
package com.yiibai.springmvc;
import org.hibernate.validator.constraints.NotEmpty;
import org.hibernate.validator.constraints.Range;
public class Student {
@Range(min = 1, max = 150)
private Integer age;
@NotEmpty
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;
}
}
Java
StudentController.java 的代碼如下所示 -
package com.yiibai.springmvc;
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.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 = "/addStudent", method = RequestMethod.GET)
public ModelAndView student() {
return new ModelAndView("addStudent", "command", new Student());
}
@ModelAttribute("student")
public Student createStudentModel() {
return new Student();
}
@RequestMapping(value = "/addStudent", method = RequestMethod.POST)
public String addStudent(@ModelAttribute("student") @Validated Student student,
BindingResult bindingResult, Model model) {
if (bindingResult.hasErrors()) {
return "addStudent";
}
model.addAttribute("name", student.getName());
model.addAttribute("age", student.getAge());
model.addAttribute("id", student.getId());
return "result";
}
}
Java
message.properties 配置如下所示 -
NotEmpty.student.name = Name is required!
Range.student.age = Age value must be between 1 and 150!
這裏的鍵可以是<Annotation>
.<object-name>
.<attribute>
。Value
是要顯示的消息。
HibernateValidator-servlet.xml 配置如下所示 -
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<context:component-scan base-package="com.yiibai.springmvc" />
<mvc:annotation-driven />
<bean class="org.springframework.context.support.ResourceBundleMessageSource"
id="messageSource">
<property name="basename" value="messages" />
</bean>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
XML
這裏的第一個服務方法student()
,已經在ModelAndView
對象中傳遞了一個名稱為“command
”的空對象,因為如果在JSP文件中使用<form:form>
標簽,spring框架需要一個名稱為“command
”的對象。 所以當調用student()
方法時,返回addStudent.jsp
視圖。
第二個服務方法addStudent()
將在URL: HibernateValidator/addStudent
上的POST方法被調用。將根據提交的信息準備模型對象。 最後從服務方法返回“result
”視圖,這將渲染result.jsp
。 如果使用validator
生成錯誤,則返回相同的視圖“addStudent
”,則Spring自動從視圖中的BindingResult
註入錯誤消息並顯示出來。
addStudent.jsp 的代碼如下所示 -
<%@ page contentType="text/html; charset=UTF-8" %>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<html>
<head>
<title>Spring MVC Form Handling</title>
</head>
<style>
.error {
color: #ff0000;
}
.errorblock {
color: #000;
background-color: #ffEEEE;
border: 3px solid #ff0000;
padding: 8px;
margin: 16px;
}
</style>
<body>
<h2>學生信息</h2>
<form:form method="POST" action="/HibernateValidator/addStudent" commandName="student">
<form:errors path="*" cssClass="errorblock" element="div" />
<table>
<tr>
<td><form:label path="name">姓名:</form:label></td>
<td><form:input path="name" /></td>
<td><form:errors path="name" cssClass="error" /></td>
</tr>
<tr>
<td><form:label path="age">年齡:</form:label></td>
<td><form:input path="age" /></td