快速业务通道

Spring MVC的表单控制器 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18
turn user; } …

ServletRequestUtils是Spring 2.0新增的工具类,可以方便地按类型获取请求参数的值,它位于org.springframework.web.bind包中。

Spring MVC的表单控制器(4)

时间:2011-03-14 陈雄华

表单数据校验

当UserRegisterController调用BbtForum#registerUser()方法注册用户时,确保User对象数据的合法性是非常重要的,你不希望用户的Email地址是非法的,用户名不应和已经用户名相同。

org.springframework.validation.Validator接口为Spring MVC提供了数据合法性校验功能,该接口有两个方法,说明如下: boolean supports(Class clazz):判断校验器是否支持指定的目标对象,每一个校验器负责对一个表单类的对象进行检验;

void validate(Object target, Errors errors):对target对象进行合法性校验,通过Errors返回校验错误的结果。

下面,我们编写一个负责对User对象进行数据合法性校验的校验器,请看以下的代码:

代码清单 4 UserValidator:校验User对象值合法性

package com.baobaotao.domain.UserValidator; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.springframework.validation.Errors; import org.springframework.validation.ValidationUtils; import org.springframework.validation.Validator; public class UserValidator implements Validator { private static final Pattern EMAIL_PATTERN = Pattern ①合法Email正则表达式 .compile("(?:w[-._w]*w@w[-._w]*w.w{2,3}$)"); public boolean supports(Class clazz) { ②该校验器支持的目标类 return clazz.equals(User.class); } public void validate(Object target, Errors errors) { ③对目标类对象进行校验,错误记录在errors中 User user = (User) target; ③-1 造型为User对象 ③-2 通过Spring提供的校验工具类进行简单的规则校验 ValidationUtils.rejectIfEmptyOrWhitespace(errors, "userName", "required.username", "用户名必须填写"); ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", "required.password", "密码不能为空"); validateEmail(user.getEmail(), errors); ③-3 校验Email格式 } private void validateEmail(String email, Errors errors) {④Email合法性校验 ValidationUtils.rejectIfEmptyOrWhitespace(errors, "email", "required.email", "Email不能为空"); Matcher m = EMAIL_PATTERN.matcher(email); ④-1 通过正则表达式校验Email格式 if (!m.matches()) { errors.rejectValue("email", "invalid.email", "Email格式非法"); } } }

在②处,我们声明该校验器支持的表单对象为User类,如果错误地将UserValidator用于其它对象校验,Spring MVC就会根据supports()方法驳回操作。

对于一般的空值校验来说,直接使用Spring提供的ValidationUtils校验工具类是最简单的办法(如③-2所示)。ValidationUtils的rejectIfEmptyOrWhitespace()、rejectIfEmpty()以及Errors的reject()、rejectValue()方法都拥有多个用于描述错误的入参,通过下图进行说明:

1)对应字段:表示该错误是对应表单对象的哪一个字段,Spring MVC的错误标签可以通过path属性访问该字段错误消息;

2)错误代码:表示该错误对应资源文件中的键名,Spring MVC的错误标签可以据此获取资源文件中的对应消息。如果希望实现错误消息的国际化,你就必须通过错误代码指定错误消息;

3)默认消息:当资源文件没有对应的错误代码时,使用默认消息作为错误消息

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号