SpringMVC学习笔记-数据验证

一、数据验证
在开发中,凡是有表单提交的地方,就必须做数据的验证,数据验证必须在两个地方都要做,一个是前端验证,一个服务端再次验证。
前端的验证都是用JS脚本来实现,因为js是运行在客户端,执行速度快,不需要服务器参与,减少服务端压力,用户体验好。但是,浏览器是可以禁用js脚本运行,所以就可以绕过客户端验证,直接把错误数据提交到服务端,所以必须在服务端再次验证。
后端验证的方式是写Java代码来实现验证, 如下:

// 增,
@RequestMapping(value = "save")
public ModelAndView save(Student student) {
 if(student.getName().length()== 0) {
        	
 }else if (student.getPhone().length()!=11) {
        	
 }
	return new ModelAndView("studentList");
}

验证框架的使用步骤:
1.导入验证框架的jar包
在这里插入图片描述
2.在springMVC的配置文件配置验证框架,在提交时,SpringMVC在封装数据时,启动验证框架对数据进行验证。

<!-- 校验器 -->
<bean class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
	   <property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
	   <property name="validationMessageSource" ref="validationMessageSource"/>
	</bean>
	<!-- 验证消息器 --> 
<bean id="validationMessageSource" 	 class="org.springframework.context.support.ReloadableResourceBundleMessageSource"/>

3.在要封装的实体对象的属性前或属性的set方法前添加相应的验证规则(注解),注意,验证框架只是验证有没有错误,它不会对错误进行片。
@Length(min=6,max=10,message=“姓名的长度是6-10个字符!”)
@NotBlank(message=“姓名不能为空!”)
private String name;
private String sex;
@Range(min=18,max=40,message=“年龄在18-40岁之间!”)
private int age;
@NotBlank(message=“电话不能为空!”)
@Pattern(regexp="^1[3|4|5|7|8][0-9]{9}$",message=“手机号码不正确!”)
private String phone;
@NotBlank(message=“地址不能为空!”)
private String address;
@Email(message=“邮箱格式不正确!”)
private String email;

4.在服务端检测框架有没有错误,如果有,则进行处理。
验证框架中如果有错误信息,则错误信息封装在一个FieldError对象中,采用键值对的形式存储,键就是属性名: email–>邮箱格式不正确! 封装成: FieldError 。
控制器处理:

//@Validated表示此对象要通过验证框架,BindingResult对象封装了验证框架的验证信息
	@RequestMapping(value = "save")
	public ModelAndView save(@Validated Student student,BindingResult result,Model model) {
		//针对提交的封装好的实体对象来判断是否通过了验证,如果通过则把对象向底层传。否则返回添加页面,并提示错误信息
		if(result.hasErrors()) {
            Map<String, String> errors = new HashMap<String, String>();       
			//循环取存储在 BindingResult对象中封装的验证信息
			for (FieldError f : result.getFieldErrors()) {
				System.out.println(f.getField()+"--"+f.getDefaultMessage());
				errors.put(f.getField(), f.getDefaultMessage());
			}
			
			//年级信息
			List<Grade> grades = new GradeServiceImpl().getGrades();
			model.addAttribute("student",student);
			model.addAttribute("errors",errors);
			model.addAttribute("grades",grades);
			
			return new ModelAndView("studentAdd");
		}else {
			//把数据传向底层,保存到数据库中。
		    return new ModelAndView("redirect:list");
		}
	}

jsp页面处理:

<form action="/springMVCDemo/student/save" method="post">
    <fieldset>
      <legend>学生基本信息</legend>
      <p>姓名:<input type="text" name="name" value="${student.name }"> <span class="s">${errors.name }</span></p>
      <p>性别:<input type="radio" name="sex" value="男" checked="checked"> 男
             <input type="radio" name="sex" value="女"> 女
      </p>
      <p>年龄:<input type="text" name="age" value="${student.age }"> <span class="s">${errors.age }</span></p>
      <p>电话:<input type="text" name="phone" value="${student.phone }"> <span class="s">${errors.phone }</span></p>
      <p>地址:<input type="text" name="address" value="${student.address }"> <span class="s">${errors.address }</span></p>
      <p>邮箱:<input type="text" name="email" value="${student.email }"> <span class="s">${errors.email }</span></p>
      <p>生日:<input type="text" name="birthday" value="${student.birthday }"></p>
      <p>年级:
          <select name="grade.gradeId">
            <c:forEach items="${grades }" var="g">
              <c:choose>
                <c:when test="${g.gradeId==student.grade.gradeId }">
                   <option value="${g.gradeId }" selected="selected">${g.gradeName }</option>                
                </c:when>
                <c:otherwise>
                   <option value="${g.gradeId }">${g.gradeName }</option>
                </c:otherwise>
              </c:choose>
            </c:forEach>
          </select>
      </p>
      <p>&nbsp;&nbsp;&nbsp;&nbsp;<input type="submit" value="保 存"></p>
    </fieldset>
  </form>

验证的注解:
@Null 验证对象是否为 null。
@NotNull 验证对象是否不为 null。
@AssertTrue 验证 Boolean 对象是否为 true。
@AssertTrue 验证 Boolean 对象是否为 false。
@Max(value) 验证 Number 和 String 对象是否小于等于指定值。
@Min(value) 验证 Number 和 String 对象是否大于等于指定值。
@DecimalMax(value) 验证注解的元素值小于等于 @DecimalMax 指定的 value 值。
@DecimalMin(value) 验证注解的元素值大于等于 @DecimalMin 指定的 value 值。
@Digits(integer,fraction) 验证字符串是否符合指定格式的数字,nteger 指定整数精度,fraction 指定小数精度。
@Size(min,max) 验证对象长度是否在给定的范围内。
@Past 验证 Date 和 Calendar 对象是否在当前时间之前。
@Future 验证 Date 和 Calendar 对象是否在当前时间之后。
@Pattern 验证 String 对象是否符合正则表达式的规则。
@NotBlank 检查字符串是不是 Null,被 Trim 的长度是否大于0,
只对字符串,且会去掉前后空格。
@URL 验证是否是合法的 url。
@Email 验证是否是合法的邮箱。
@CreditCardNumber 验证是否是合法的信用卡号。
@Length(min,max) 验证字符串的长度必须在指定范围内。
@NotEmpty 检查元素是否为 Null 或 Empty。
@Range(min,max,message) 验证属性值必须在合适的范围内。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值