千锋教育-做有情怀、有良心、有品质的IT职业教育机构

位置:首页 > 学员动态

千锋西安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.整体项目的结构图片
5.jpg
  10.整体项目的运行结果
  a.英文不合法校验
6.jpg
  b.中文不合法校验
7.jpg
  c.校验成功页面
8.jpg

上一篇:千锋让我成长为职业开发师 千锋西安HTML5学员学习感想
下一篇:千锋西安校区年终总结会 总结过去展望未来

新开班信息

企业之声 more >
  • 人事专员 刘娇
    【博彦科技】人事专员 刘娇

    入职一年多崔志波工作非常好,感谢千锋培养的人才。

  • 技术主管李先生
    【华夏基金】技术主管李先生

    周红梅,有较强的学习能力,是有发展潜力的年轻人。

  • 总经理宋总
    【北京未来付网络技术公司】总经理宋总

    郑秋浩思想灵活,能按时保质保量完成工作内容。

西安校区咨询电话

029-85363390 18610973034

0元入学 线上咨询 申请试听
  • 校区地址:西安市高新六路52号立人科技园C座西区4层
    咨询电话:029-85363390 18610973034
    面授课程:JAVA课程培训、Android课程培训、HTML5课程培训
  • 北京天丰利校区:北京市海淀区宝盛北里西区28号天丰利商城4层
    北京沙河校区:北京市昌平区沙阳路18号北京科技职业技术广场服务楼2层、南区服务楼2层
    咨询电话:400-654-7778 010-82790226-801
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训、UI课程培训、好程序员特训营
  • 深圳科技园校区:深圳市南山区科苑南路高新技术产业园R3-B栋5层
    深圳大学城校区:深圳市南山区留仙大道1201号大学城创客小镇16栋2楼、3楼
    深圳西部硅谷校区:深圳市宝安区宝安大道5010号西部硅谷B座A605-619
    咨询电话:0755-86681178/9-801
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训、好程序员特训营、UI课程培训
  • 上海地址:上海市宝山区同济支路199号智慧七立方3号楼2-4层
    咨询电话:400-627-7899 021-65025129-602
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训、好程序员特训营、UI课程培训
  • 郑州地址:郑州市金水区纬五路21号河南教育综合楼(经纬中学楼)6/7/8层
    咨询电话:0371-55911950 400-654-7778
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训、UI课程培训
  • 广州地址:广州市天河区元岗路310号智汇park创意园E座5层
    咨询电话:020-22119207 400-654-7778
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训
  • 大连地址:大连市甘井子区软件园路2号B8座二楼
    咨询电话:0411-39026086 400-654-7778
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训
  • 武汉地址:武汉市东新区光谷大道77号金融港B26栋9楼
    咨询电话:027-59905902 027-59905908 027-59905909
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训
  • 成都旅游校区:成都市一环路西二段17号四川旅游青羊校区内
    成都华立校区:成都一环路西二段17号华立大厦3楼
    咨询电话:028-83178771 028-61967740
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训、UI课程培训
  • 杭州地址:浙江省杭州市江干区九堡旺田书画城A座4层
    咨询电话:0571-86893632 010-82790226/7-801
    面授课程:iOS课程培训、Android课程培训
  • 青岛校区地址:青岛市市南区金坛路17号青岛职业技术南校区实训楼A4层
    咨询电话:0532-80910752/3 010-82790226/7-801
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训
  • 了解千锋动态
    关注千锋教育服务号

  • 扫码关注千锋互联
    身边的移动开发导师