数据校验
前端校验
Jquery-validate(专门用来校验的包)
- 需要Jquery核心包
- 需要validate包
- 菜鸟教程提供的远程包
1 | <script src="http://static.runoob.com/assets/jquery-validation-1.14.0/lib/jquery.js"></script> |
2 | <script src="http://static.runoob.com/assets/jquery-validation-1.14.0/dist/jquery.validate.min.js"></script> |
- jQuery Validate提供了中文信息提示包,位于下载包的 dist/localization/messages_zh.js
- 导入上述两个包
- 初始化
- 注意每个表单控件都要有个name
1
<script>
2
$().ready(function() {
3
$("#待校验的表单ID").validate({
4
//规则制定
5
rules:{
6
email:{
7
required:true,
8
email:true
9
},
10
....
11
},
12
//提示信息
13
messages:{
14
email:"请输入一个正确的邮箱",
15
...
16
}
17
});
18
};
19
</script>
详细请参考官方文档
正则表达式
详细请参考官方文档
服务端校验
- 为什么要服务端校验?
答:因为有时是直接有请求的url发送过来,而不是用表单提交 - 什么时候校验的?
答:处理器适配器工作时校验,拿到请求参数——>进行类型转换——>校验——>交给处理请求的方法 - 怎么校验的?
答:
- 先导入相关jar包:
hibernate.jar,jboss.jar,validation.jar,classmate - 编写处理请求的方法
- 指定校验规则,在要校验的对象类前制定,加入规则的注解如:
1 | @Email(message="邮箱格式不对",groups={RegisterGroup.class}) |
2 | private String mail; |
分组校验
类似注册和登录时,同时用到了账号和密码的校验,多次写重复的内容,显然不能这样,于是这里要用到分组校验。
- 怎么分组?
- 创建分组类,一个组一个类
- 代表组的类内部什么都不用写
- 在要校验的对象类前的注解里加入goups={a.class},在controller里的方法添加(返回值类型后面,形参前面):@validated
资源文件
- 为什么要使用资源文件?
原因有两点:1. 国际化需要 2.解耦和,把中文提示单独定义在资源文件中 - 怎么做呢?
把class中的提示信息提取出去放入资源文件中,然后通过表达式获取信息。 - 具体?
- 把校验出错信息提取到userValidateMessageResource.properties文件中,注意是键值对的形式
- 把user对象中指定出错信息的地方改为通过{key}的形式获取资源文件中的内容
- 需要注册信息资源bean,目的是读取资源文件中的内容到内存,然后在校验器bean