TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
Struts2?自定义验证器: 具体步骤如下:
1.新建web工程Struts2Validator
2.导入所需jar包(带的war包里面有)
3.展开xwork-2.0.1.jar,com.opensymphony.xwork2.validator.validators目录下有个default.xml,双击打开,然后复制里面的xml内容;在根目录下新建一个xml文件,取名叫validators.xml,然后粘贴保存。
讲解:
在源码com.opensymphony.xwork2.validator.ValidatorFactory中,在325行至330那一段代码可以看出,如果不能在根目录下找到validators.xml文件,验证框架将调用默认的验证设置,即default.xml里面的配置信息
4.新建一个类(我示例是叫DateEx)继承FieldValidatorSupport,实现validate方法。
5.在validators.xml中添加一个validator节点,和他一样指定名称和类权限定名,这里指定的name就是你将来要是使用的类型名字。
讲解:
在DateEx里面,这个时候你就可以参照如IntRangeFieldValidator等他实现的验证器来写自己的验证器了。这里注意了,你在这个类里面每写一个属性(含get set方法),就对应的一个xxxx-validation.xml这个配置文件里面
<param name="expression"></param>这个name的名字了,可以在扩展类里面直接获得了,根据传入参数进行自定义方式验证了。如下object是validate传进来的参数,表示你输入的数据对象:
// 获得字段的名字
String fieldName = getFieldName();
// 获得输入界面输入的值
String value = getFieldValue(fieldName, object).toString();
6.新建action,继承ActionSupport或Action都行,写上相应需要验证的属性字段
7.新建验证文件xxxx-validation.xml,这个xxxx就是你前面action的类名字,xxx-xxx-validation.xml第二个xxx表示是别名。写上验证的xml,可以参照源码或网上示例,如:
<field name="regexMonthField">
<field-validator type="myvalidator">
<message>
<![CDATA[ 不是一个有效的月份! ]]>
</message>
</field-validator>
</field>
8.剩下的就和使用自带的验证器一样了,配置struts.xml,以及action.
至此主要的述完了,验证器是拦截器即Interceptor实现的,所以并没有看见任何代码把他们和我的action文件关联起来,他们默认的验证了,这方面可以参考Max On Max On java的文章.
源码下载:http://file.javaxxz.com/2014/10/11/061545890.zip |
|