《研磨struts2》第十章 验证框架 之 10.5 自定义验证器
虽然Struts2的内建验证器可以完成绝大多数的验证需求,但是,有的时候还是需要个性化定制一些自定义的验证器。
?????? 以一个示例来说明吧。来实现一个不接受中文字符的验证器,比如,在一个网站上进行注册,在填入账号的时候,必须填入英文字符或者是数字等,而不接受中文字符,同时还要求验证器可以分辨以下三种情况:
?????? 该怎么实现呢?通常在做自定义验证器的时候,需要考虑如下几个问题:
接下来就来看看如何实现自定义验证器吧。
要验证一个字符串是否含有中文字符,可以使用比较字符串的字节数和字符数的方式,也就是比较byte的长度和char的长度。
调用字符串的length方法,可以返回字符串的长度,这时候,无论是中文字符还是引文字符都会按照一个字符来返回,也就是得到了字符串的字符数。
如果把字符串转换为byte[],然后取其length,就可以得到字符串的字节数,这时候,中文字符在数组中占2个位置而英文字符在数组中占1个位置。
因此,比较字符串的字节数和字符数,就可以知道字符串中是否有中文字符了,如果字节数大于字符数,那么肯定包含了中文字符。示例代码如下:
?
java代码:查看复制到剪贴板打印?
java代码:查看复制到剪贴板打印自定义的验证器,只需要在classpath的根路径上,即放在src文件夹下(会被Eclipse自动拷贝到classpath的根下去),仿照default.xml的声明方式,写一个validators.xml即可。示例如下:
?
java代码:查看复制到剪贴板打印不过要注意一点,在Struts2的2.0.8版本之前,一旦自己定义了validators.xml文件,系统就不会再加载默认的Validators文件,所以在Validators.xml中需要拷贝默认的内容。
在应用中引用自定义验证器的时候,和引用内建验证器的方式是完全一样的。修改RegisterAction-validation.xml中验证用户填入的账号(user.account)属性的验证器,设置为上面配置的“chinese”,示例代码如下:
?
java代码:查看复制到剪贴板打印这时候,再访问用户注册页面,在帐号上输入中文,会发现不能通过验证,运行页面如下:

图10.6 引用自定义验证器
?????? 通过上面示例可以看出,自定义的验证器和所有内置验证器的使用是完全一样的,因此,任何人都可以为Struts2添砖加瓦,贡献出自己的验证器,来让其他人使用。
?
私塾在线网站原创《研磨struts2》系列
转自请注明出处:【http://sishuok.com/forum/blogPost/list/4094.html】
欢迎访问http://sishuok.com获取更多内容