Struts2提供了Collection的转换器,可以直接把页面传递过来的参数转换成List Set类型,使用这个转换器能为我们节省不少手指运动量,但Collection的验证就成了一个问题.google之后,找到了这个资料
webwork数组形式提交表单及validation研究.但文中的collection是xwork1的验证器,在xwork2中并不存在,于是想到把它从xwork1中转移过来.并修改了少许,使之可以支持多个验证器.
有2个类,CollectionFieldValidator和DefaultActionValidatorManager,因为都是xwork1的类,所以我们还要稍微改动一下.
CollectionFieldValidator.java
//propertyname,e.g:persons.name
private String property;
public String getProperty() { return this.property; }
public void setProperty(String collection) { this.property = collection; }
//all validatorRef split with ","
private String validatorRefs;
public String getValidatorRefs() { return this.validatorRefs; }
public void setValidatorRefs(String validatorRefs) { this.validatorRefs = validatorRefs; }
//a validator's param key start with it's ref
private Map validatorParams = new LinkedHashMap();
public void setValidatorParams(Map validatorParams) { this.validatorParams = validatorParams; }
public Map getValidatorParams() { return validatorParams; }
//get all validator and set them then validate
public void validate(Object object) throws ValidationException {...}
//find all propertyname and put them into result (a recursion method)
protected void populateValue(Object obj, CloneableIterator iterator, List result, String overallPropertyName) throws OgnlException, CloneNotSupportedException {...}
}
因为CollectionFieldValidator.java中调用了xwork1的DefaultActionValidatorManager.java中的validate(Object object, List validators, ValidatorContext validatorContext)方法,但该方法在xwork2中不存在,甚至ActionValidatorManager中不存在这个方法接口,只能自己动手了.
Xwork1DefaultActionValidatorManager.java
//继承了xwork2的DefaultActionValidatorManager
public class Xwork1DefaultActionValidatorManager extends DefaultActionValidatorManager{
//仅仅从xwork1的DefaultActionValidatorManager.java中拷贝过来
public void validate(Object object, List validators, ValidatorContext validatorContext) throws ValidationException {...}
}
使用方法如下:
validators.xml
<validators>
<validator name="collection" class="com.ddl.tools.CollectionFieldValidator"/>
</validators>
ActionName-validattion.xml
<validators>
<!-- Action 中 Field 名-->
<field name="sentForm">
<field-validator type="collection">
<!-- 需要验证的属性,其中details是collection-->
<param name="property">sentForm.details.requestQty</param>
<!-- 以逗号分隔 -->
<param name="validatorRefs">required,int</param>
<!-- 验证器引用名_参数名-->
<param name="validatorParams['required_messageKey']">receivedocument.requestQty.validate.required</param>
<param name="validatorParams['int_messageKey']">receivedocument.requestQty.validate.int</param>
<message>...</message>
</field-validator>
</field>
<field name="sentForm">
<field-validator type="collection">
<param name="property">sentForm.details.item</param>
<param name="validatorRefs">requiredstring</param>
<param name="validatorParams['requiredstring_messageKey']">receivedocument.item.validate.required</param>
<message>...</message>
</field-validator>
</field>
</validators>
可能有人注意到使用方法和上面提供的链接中稍有不同,这是因为原来的collection验证不能有多验证器.
- CollectionValidator.zip (5.2 KB)
- 描述: CollectionFieldValidator.java
Xwork1DefaultActionValidatorManager.java
- 下载次数: 44
分享到:
相关推荐
基于springboot+Web的毕业设计选题系统源码数据库文档.zip
四大类垃圾,有害垃圾、可回收垃圾、厨余垃圾、其他垃圾,共四千张左右,包含小米电池等不寻常的垃圾,适用于2025工程实践与创新能力大赛。
ASP.NET在线培训考试系统源码 1、增加错题卡功能 2、升级html功能 3、系统代码,数据库,数据库存储过程等,都无任何加密,是全部源码。 4、优化升级版本,界面更美观。 一、技术特点: 1、系统基于微软先进的.Net平台,100%纯B/S架构模式,系统部署、维护方便,具有良好的开放性、伸缩性和可扩展性 2、系统试卷分为考试模式和作业模式,考试模式自动计时,作业模式不计时,可用于平常作业或练习;试卷出题方式可采用题序固定、题序随机或试题随机模式;试卷显示方式分为整卷模式和逐题模式;试题随机和逐题模式可有效防止作弊; 3、支持自定义题型功能,系统提供单选类、多选类、判断类、填空类、问答类、作文类、打字类和操作类等八大类基本题型,其中操作类试题提供了文件下载和上传功能,轻松实现Word、Excel、FrontPage、Visual Foxpro等对文件或文件夹的操作; 4、系统可对试题的科目、知识点、题型、难度、分数、试题内容和试题解析等属性进行设置,单选类、多选类试题支持6个选项,完全可以满足当前试题要求,少于6个选项,
onnxruntime-1.15.1-cp310-cp310-win_amd64.whl
numpy-1.16.0-cp35-cp35m-linux_armv7l.whl
AI视频数据集(交通路口摄像头视频)
java源码资源EJB中JNDI的使用源码例子提取方式是百度网盘分享地址
scipy-1.12.0-cp311-cp311-linux_armv7l.whl
numpy-1.21.1-cp37-cp37m-linux_armv7l.whl
ta_lib-0.5.1-cp313-cp313-win32.whl
基于springboot的学生服务平台源码数据库文档微信小程序.zip
基于springboot旅游管理系统源码数据库文档.zip
PDF电子发票信息提取,支持将pdf发票文件夹下的剩所有发票,转为excel格式的信息,对于发票量比较大,不好统计,需要一个一个去统计的情况,可节省2个点以上的时间,一次下载,终身有效。
Pillow-7.2.0-cp37-cp37m-linux_armv7l.whl
基于springboot的银行信用卡额度管理系统源码数据库文档.zip
基于JavaScript的在线考试系统源码数据库文档.zip
Pillow-7.1.0-cp311-cp311-linux_armv7l.whl
基于SpringBoot装修公司管理平台源码数据库文档.zip
onnxruntime-1.17.0-cp311-cp311-win_amd64.whl
numpy-1.22.2-cp311-cp311-linux_armv7l.whl