跟杨春娟学SpringMVC笔记:Form表单之JSR303验证

完成:第一遍

1.如何使用JSR303验证要先导入validation-api和hibernate-validator的依赖jar包?

在pom.xml导入validation-api和hibernate-validator的依赖jar包

<dependencies><dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId><version>1.1.0.Final</version></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>5.4.1.Final</version></dependency></dependencies>

2.如何使用JSR303验证要在springmvc-serlvet.xml中添加namespace和依赖地址?

主要是加入xmlns:mvc的namespace和schemaLocation

<?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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsd"><!-- 配置扫描的包 --><context:component-scan base-package="com.form"/><!-- 配置视图解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/pages/"></property><property name="suffix" value=".jsp"></property></bean><!-- 加载外部的语言文件 --><bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"><!-- 提示信息文件地址 --><property name="basename" value="classpath:message"></property><property name="useCodeAsDefaultMessage" value="false"></property><!-- 需要国际化的内容编码都需要使用UTF-8 --><property name="fileEncodings" value="UTF-8"></property><property name="cacheSeconds" value="120"></property></bean><bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"><property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property><property name="validationMessageSource" ref="messageSource"></property></bean><bean id="conversion" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"/><mvc:annotation-driven validator="validator" conversion-service="conversion"></mvc:annotation-driven>
</beans>

3.如何在UserForm上加验证注解?

package com.adbycool.form;import java.util.Date;
import java.util.List;import javax.validation.constraints.Future;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.Past;
import javax.validation.constraints.Pattern;import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotEmpty;
import org.springframework.format.annotation.DateTimeFormat;public class UserForm {@NotEmpty(message="{id.validator}")private String id;@Length(min=3, max=10, message="{name.validator}")private String name;@NotEmpty(message="{password.required}")@Length(min=6, max=10, message="{password.validator}")private String password;@NotEmpty(message="{password.required}")@Length(min=6, max=10, message="{password.validator}")private String repeatPassword;@Min(1)@Max(110)private int age;@Pattern(regexp="[1][3|4|5|7|8][0-9]{9}$", message="{phone.validator}")private String phoneNumber;private String gender;private List<String> hobby;private String country;private String remark;//@Future@Past(message="{birthday.validator}")@DateTimeFormat(pattern="yyyy/MM/dd")private Date birthday;@Emailprivate String email;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getRepeatPassword() {return repeatPassword;}public void setRepeatPassword(String repeatPassword) {this.repeatPassword = repeatPassword;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getPhoneNumber() {return phoneNumber;}public void setPhoneNumber(String phoneNumber) {this.phoneNumber = phoneNumber;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public List<String> getHobby() {return hobby;}public void setHobby(List<String> hobby) {this.hobby = hobby;}public String getCountry() {return country;}public void setCountry(String country) {this.country = country;}public String getRemark() {return remark;}public void setRemark(String remark) {this.remark = remark;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}}

4.如何在src/main/resources下面放message.properties属性文件来配置存放提示信息?

message.properties

id.validator=id is required
name.validator=name length must be between 3 and 10
password.required=password is required
password.validator=password length must be between 6 and 10
Min.userForm.age=the min value of age is 1
Max.userForm.age=the max value of age is 110
phone.validator=phone format is error
birthday.validator=birthday should be a past year
repeatPassword.validate=repeat password should be the same with password

5.如何在Controller中使用JSR303验证?

@Valid注解用于校验,所属包为:javax.validation.Valid。

//   表单提交后会提交到control,写一个add入口的方法来处理表单结果
// 参数中BindingResult表示返回值@RequestMapping("add")public String add(@Valid UserForm userForm,BindingResult bindingResult,Model model) {//      如果有错误if(bindingResult.hasErrors()) {return "addUser";}
//      可以通过传来的userForm拿到属性String id = userForm.getId();String name = userForm.getName();
//      通过model将数据传到前台model.addAttribute("id",id);model.addAttribute("name",name);return "success";}

6.@Validated和@Valid用法与区别?

@Validated:提供了一个分组功能,可以在入参验证时,根据不同的分组采用不同的验证机制
@Valid:作为标准JSR-303规范,还没有吸收分组的功能。

@Validated:可以用在类型、方法和方法参数上。但是不能用在成员属性(字段)上
@Valid:可以用在方法、构造函数、方法参数和成员属性(字段)上

两者是否能用于成员属性(字段)上直接影响能否提供嵌套验证的功能

7.addUser.jsp的form表单中加入如果发生错误,怎么显示错误提示?

主要是form-errors标签的作用:< form:errors path=“id” />

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Add User</title>
</head>
<body><h2>Add User</h2><form:form method="POST" action="add"  modelAttribute="userForm"><!-- 这种方式提示所有路径的异常提示 --><%--   <form:errors path="*"></form:errors> --%><table><tr><td><form:label path="id">Id</form:label></td><td><form:input path="id" maxlength="8"/> <form:errors path="id"/></td></tr><tr><td><form:label path="name">Name</form:label></td><td><form:input path="name"/><form:errors path="name"/></td></tr><tr><td><form:label path="password">Password</form:label></td><td><form:password path="password"/><form:errors path="password"/></td></tr><tr><td><form:label path="repeatPassword">Repeat Password</form:label></td><td><form:password path="repeatPassword"/><form:errors path="repeatPassword"/></td></tr><tr><td><form:label path="age">Age</form:label></td><td><form:input path="age"/></td></tr><tr><td><form:label path="phoneNumber">Phone Number</form:label></td><td><form:input path="phoneNumber"/><form:errors path="phoneNumber"/></td></tr><tr><td><form:label path="gender">Gender</form:label></td><td><form:radiobutton path="gender" value="man"/>男<form:radiobutton path="gender" value="woman"/>女</td></tr><tr><td><form:label path="hobby">Hobby</form:label></td><td><form:checkbox path="hobby" value="dancing"/>Dancing<form:checkbox path="hobby" value="singing"/>Singing<form:checkbox path="hobby" value="Printing"/>Printing </td></tr><tr><td><form:label path="country">Country</form:label></td><td><form:select path="country"><form:option value="china">China</form:option><form:option value="japan">Japan</form:option><form:option value="us">US</form:option></form:select> </td></tr><tr><td><form:label path="remark">Remark</form:label></td><td><form:textarea path="remark"/></td></tr><tr><td><form:label path="birthday">Birthday</form:label></td><td><form:input path="birthday"/></td></tr><tr><td><form:label path="email">Email</form:label></td><td><form:input path="email"/></td></tr><tr><td colspan="2"><form:button>Submit</form:button></td></tr></table></form:form>
</body>
</html>

跟杨春娟学SpringMVC笔记:Form表单之JSR303验证相关推荐

  1. 跟杨春娟学SpringMVC笔记:Form表单之Spring验证框架

    跟杨春娟学SpringMVC笔记:Form表单之Spring验证框架 完成:第一遍 1.Spring框架验证和JSR303验证的不同之处在哪里? 不同一:Spirng框架验证需要实现Validator ...

  2. 跟杨春娟学Spring笔记:AOP之SpringAOP引介通知

    跟杨春娟学Spring笔记:AOP之SpringAOP引介通知 完成:第一遍 1.如何代码实现AOP之SpringAOP引介通知? IntroductionInterceptor(引介通知) 在目标类 ...

  3. 跟杨春娟学Spring笔记:表达式装配

    跟杨春娟学Spring笔记:表达式装配 完成:第一遍 1.使用表达式注入有哪几种? 如果是表达式注入,必须在value里写#{表达式} 运算符:等于 符号: == 文本类型运算符: eq 运算符:小于 ...

  4. 跟杨春娟学Spring笔记:集合装配

    跟杨春娟学Spring笔记:集合装配 完成:第一遍 1.常见集合元素有哪些? 集合元素 : 用途:装配list类型的值,允许重复 集合元素 : 用途:装配set类型的值,不允许重复 集合元素 : 用途 ...

  5. 跟杨春娟学Spring笔记:自动装备Bean

    跟杨春娟学Spring笔记:自动装配Bean 完成:第一遍 1.如何自动装配Bean? 要使用自动装配,就需要配置< bean >元素的autowire属性 名称:byName 说明:根据 ...

  6. And Design:拓荒笔记——Form表单

    And Design:拓荒笔记--Form表单 Form.create(options) Form.create()可以对包含Form表单的组件进行改造升级,会返回一个新的react组件. 经 For ...

  7. html form提交前验证,form表单提交前验证实现方法

    form表单提交前验证实现方法2017-11-26 20:54 form表单提交是网站中最常见的,基本上所有的网站都会用到. 除非你就一些静态网页,仅仅是展示,而不需要互动,所以不需要提交表单. 但是 ...

  8. springmvc ajax form表单提交出现400报错

    此为转载:确实很不错,最下有原文的传送门 springmvc form表单提交报400错误,出现400错误的原因及解决方法: 原因: 在SpringMVC中的Action中处理前台ajax请求传过来的 ...

  9. html form表单提交前验证

    可以使用form表单的onsubmit方法,在提交表单之前,对表单或者网页中的数据进行检验. onsubmit指定的方法返回true,则提交数据:返回false不提交数据. <HTML>& ...

最新文章

  1. 语音合成android代码,百度 TTS 语音合成-Android
  2. OpenCV,马赛克 常用图像增强算法的实现
  3. 第四范式陈雨强:万字深析工业界机器学习最新黑科技
  4. opencv python cv2.imdecode()函数报错 :TypeError: Expected cv::UMat for argument 'buf'
  5. JZOJ 5444. 【NOIP2017提高A组冲刺11.2】救赎
  6. 一个大型虚拟项目包含位于不同地点的许多干系人_项目管理与人生
  7. python回声程序 一行代码_python实现的比较完成的带声音的摩斯码翻译程序的代码...
  8. linux 复制指定目录下的全部文件到另一个目录中,linux cp 文件夹
  9. Kaggle 数据清洗挑战 Day 1 - 手把手教你五步处理缺失值
  10. 【语音分析】基于matlab语音短时频域分析【含Matlab源码 558期】
  11. 加油吧 少年(励志)
  12. H3C WX3024无线控制器PSK加密配置
  13. 零拷贝原理详解(很多大厂面试题哦)
  14. java逆向_Java逆向入门(一)
  15. BZOJ 4567: [Scoi2016]背单词
  16. 安全的可靠的数据防泄密系统
  17. (心态篇)空杯心态,一个程序员的自我修炼
  18. stream流的应用与并行流
  19. 2019 最新版百度云下载破解限速工具,一个办法让你告别下载慢的体验!
  20. 台式计算机启动叫两声,联想台式机开机后2声报警响怎么办

热门文章

  1. Jmeter性能测试一
  2. 前端系列之jQuery(jQuery瀑布流布局)
  3. 图解4种git合并分支方法
  4. 2021-2027全球与中国经济型投影仪市场现状及未来发展趋势
  5. 【Linux】LVM与磁盘配置
  6. 计算机视觉在安防、交通、机器人、无人车等领域的应用
  7. 股票中的一些名词术语(一)
  8. 怎样设置idea访问浏览器
  9. 【转载】新浪微博数据挖掘方案
  10. 状压DP学习总结 (详解,适合没状压dp基础的人学习,还在更新中,,,,)