千锋西安Java课堂—Spring校验框架
时间:2018-01-15 17:15:48 | 来源:西安千锋 | 作者:千锋教育西安校区
Spring拥有自己的校验框架,使用起来非常的简便。本次主要使用的是继续Validator接口来实现的数据校验。终配合i18n来实现不同语言版本的校验信息的显示。
环境说明,sts3.8.2+maven3.3.9+tomcat8.5
实现步骤:
1.新增maven web项目,在pom中添加依赖
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.6.RELEASE</version> </dependency>
2.在web.xml中配置Spring MVC的配置文件
<!-- The front controller of this Spring Web application, responsible for handling all application requests --> <!-- spring MVC配置信息,所有的请求都交给DispatcherServlet --> <servlet> <servlet-name>springDispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <!-- Map all requests to the DispatcherServlet for handling --> <servlet-mapping> <servlet-name>springDispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
3.在Spring MVC配置文件WEB-INF/springDispatcherServlet-servlet.xml中设置
<!-- 配置模型驱动 --> <mvc:annotation-driven /> <!-- 配置缺省的静态资源加载 --> <mvc:default-servlet-handler /> <!-- 配置上下文的组件扫描,控制器都在该包下 --> <context:component-scan base-package="com.qfedu.controller" /> <!-- 配置消息资源,错误信息都在该msg文件之下 --> <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource" p:basename="/WEB-INF/msg"/> <!-- Spring的ViewResolver,配置前后缀 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/" p:suffix=".jsp" />
4.新增pojo类Student
package com.qfedu.pojo; public class Student { private int sid; private String name; private int age; private double score; public int getSid() { return sid; } public void setSid(int sid) { this.sid = sid; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public double getScore() { return score; } public void setScore(double score) { this.score = score; } }
5.新增校验类StudentValidater实现Spring的Validate接口5
package com.qfedu.validate; import org.springframework.validation.Errors; import org.springframework.validation.ValidationUtils; import org.springframework.validation.Validator; import com.qfedu.pojo.Student; public class StudentValidate implements Validator { @Override public boolean supports(Class<?> clazz) { return Student.class.isAssignableFrom(clazz); } @Override public void validate(Object target, Errors errors) { Student stu = (Student) target; ValidationUtils.rejectIfEmpty(errors, "name", "stu.name"); ValidationUtils.rejectIfEmpty(errors, "age", "stu.age"); ValidationUtils.rejectIfEmpty(errors, "score", "stu.score"); ValidationUtils.rejectIfEmpty(errors, "sid", "stu.sid"); int age = stu.getAge(); if(age < 0 || age > 200){ errors.rejectValue("age", "stu.age.invalid"); } double score = stu.getScore(); if(score < 0 || score > 100){ errors.rejectValue("score", "stu.score.invalid"); } } }
6.新增控制器类StudentController
package com.qfedu.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import com.qfedu.pojo.Student; import com.qfedu.validate.StudentValidate; @Controller public class StudentController { // 任何请求将都被该请求对应的页面来处理 @GetMapping("/{view}") public String getView(@PathVariable String view, Model model){ // 在model中添加student对象,用来在表单中显示和处理对象的数据 model.addAttribute("student", new Student()); return view; } @PostMapping("/saveStudent") public String saveStudent(Student student, BindingResult errors, Model model){ StudentValidate sv = new StudentValidate(); sv.validate(student, errors); if(errors.hasErrors()){ return "saveStudent"; } return "success"; } }
6.WEB-INF下新增两个msg文件以支持中文(msg_zh_CN.properties)和英文(msg_en_US.properties)的校验,如果有需要还是自行按照规则添加该文件
#msg_en_US.properties stu.name=name must not be empty! stu.age=age must not be empty! stu.score=score must not be empty! stu.sid=sid must not be empty! stu.age.invalid=age is not available, must be between 0 - 200 stu.score.invalid=score is not available, must be between 0 - 100
#msg_zh_CN.properties #后面的东西全部是上面对应key的中文翻译,自动被转成Unicode编码 stu.name=\u59D3\u540D\u4E0D\u80FD\u4E3A\u7A7A! stu.age=\u5E74\u9F84\u4E0D\u80FD\u4E3A\u7A7A! stu.score=\u6210\u7EE9\u4E0D\u80FD\u4E3A\u7A7A! stu.sid=\u5B66\u751F\u7F16\u53F7\u4E0D\u80FD\u4E3A\u7A7A! stu.age.invalid=\u5E74\u9F84\u5FC5\u987B\u57280-200\u4E4B\u95F4 stu.score.invalid=\u6210\u7EE9\u5FC5\u987B\u57280-100\u4E4B\u95F4
7.在webapp下新增saveStudent.jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://www.springframework.org/tags/form" prefix="f" %> <!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=UTF-8"> <title>Insert title here</title> </head> <body> <f:form action="saveStudent" commandName="student" method="post"> <font color="red"><f:errors path="sid" /></font> sid:<f:input path="sid" /> *<br /> <p><font color="red"><f:errors path="name" /></font> name:<f:input path="name" />*<br /> <p><font color="red"><f:errors path="age" /></font> age:<f:input path="age" />*<br /> <p><font color="red"><f:errors path="score" /></font> score:<f:input path="score" />*<br /> <input type="submit" value="submit" /><br /> </f:form> </body> </html>
8.在webapp下新增success.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!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=UTF-8"> <title>Insert title here</title> </head> <body> <h1>this is success page.</h1> </body> </html>
9.整体项目的结构图片
10.整体项目的运行结果
a.英文不合法校验
b.中文不合法校验
c.校验成功页面
上一篇:千锋让我成长为职业开发师 千锋西安HTML5学员学习感想
下一篇:千锋西安校区年终总结会 总结过去展望未来