`
lingzantia
  • 浏览: 150047 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Struts2中的collection验证

    博客分类:
  • Java
阅读更多
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
分享到:
评论

相关推荐

    (转)Struts2中的collection验证

    在Struts2中,验证是一个重要的部分,它确保用户输入的数据符合应用程序的预期格式和规则。本篇文章主要关注的是Struts2中的集合验证,即如何验证数组、列表或其他集合类型的用户输入。 `CollectionFieldValidator`...

    Struts2常用标签

    本篇文章主要关注Struts2中的常用标签,这些标签大大简化了Web开发中的一些常见任务。 首先,我们要明白Struts2标签库与Struts1.x的不同之处。在Struts1.x中,标签库按照功能划分为HTML、Tiles、Logic和Bean等几个...

    深入浅出Struts2(附源码)

    作者处处从实战出发,在丰富的示例中直观地探讨了许多实用的技术,如数据类型转换、文件上传和下载、提高Struts 2应用的安全性、调试与性能分析、FreeMarker、Velocity、Ajax,等等。跟随作者一道深入Struts 2,聆听...

    ognl struts2

    1. 数据绑定:在Struts2中,用户表单提交的数据可以通过OGNL自动绑定到Action类的属性上,减少了手动设置值的工作量。 2. 视图渲染:视图层(如JSP)通过OGNL表达式访问Action的属性,动态生成HTML内容。 3. 表达式...

    struts2 标签

    在Struts2中,标签是核心组件之一,它们极大地简化了JSP页面的编写,提高了代码的可读性和可维护性。 Struts2的标签库相比Struts1.x有了显著的改进和扩展。在Struts1.x中,标签库被分为几个部分,包括HTML、Tiles、...

    struts2的学习笔记+测试源代码

    在这个学习笔记和测试源代码中,我们将专注于Struts2中的OGNL(Object-Graph Navigation Language)表达式,这是一种强大的表达式语言,用于在Java对象图中导航和操作数据。 OGNL是Struts2框架的核心部分,它允许...

    struts2+mybatis+spring整合

    Struts2、MyBatis和Spring的整合是Java Web开发中常见的技术栈,通常被称为SSM框架。这个组合提供了模型-视图-控制器(MVC)架构的支持,数据持久层的处理以及依赖注入的能力,使得开发者能够高效地构建可维护、可...

    最新Struts和Hibernate和Spring经典面试题

    Struts 的工作机制包括加载初始化 ActionServlet、从 struts-config.xml 文件中读取配置信息、检索和用户请求匹配的 ActionMapping 实例、创建 ActionForm 对象、表单验证、将请求转发给相应的 Action 等步骤。...

    深入浅出Struts 2 .pdf(原书扫描版) part 1

    书中介绍了如何利用Struts 2 来解决Web 应用开发中的常见问题,同时还深入浅出地探讨了许多能帮助程序员编写Struts 2 应用程序的技巧,如管理页面导航活动、输入验证、国际化和本地化、对Ajax 的支持,等等。书中...

    struts2.5 web.xml配置

    在探讨Struts2.5中的`web.xml`配置时,我们首先需要理解`web.xml`在Java Web应用中的角色以及它如何与Struts框架交互。`web.xml`是Java Web应用的核心配置文件之一,用于定义应用程序级别的配置信息,如过滤器、监听...

    jsp struts1 标签实例详解第1/2页

    在这个实例中,我们主要关注Struts1的标签应用,以及如何在JSP页面中使用这些标签。 首先,我们看到`TagForm.java`这个类,它是Struts1中的一个ActionForm。ActionForm是Struts1中处理用户请求数据的核心组件,它...

    Struts常见错误汇总

    2. **检查配置**:确保 Struts 配置文件 `struts-config.xml` 中正确地指定了资源文件路径。 3. **检查 JSP 页面**:确保 `&lt;bean:message&gt;` 标签中的 `key` 属性值正确无误。 #### 四、No getter method for ...

    Struts常见错误汇总.txt

    2. **检查 struts-config.xml 文件**:确认配置文件中正确指定了要使用的资源文件路径。 3. **检查国际化配置**:如果使用了多语言支持,确保不同语言版本的资源文件均存在且键值对应正确。 #### 五、No getter ...

    struts+spring+Hibernate

    2. **FormBean 中的 validate 方法**:在 FormBean 类中实现 validate 方法来进行表单验证。 #### 九、Struts 的设计模式 **MVC 模式**: - **Model**(模型):负责业务逻辑处理,通常通过 JavaBeans 实现。 - **...

    struts常见异常及处理

    - **异常描述**:在 Struts 配置文件 `struts-config.xml` 中定义了一个 ActionForm,但 `type` 属性指定的类不存在或者在 Action 的定义中,`name` 或 `attribute` 属性指定的 ActionForm 不存在。 - **解决方案**...

    struts原理与实践(七)

    Struts 是一个基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架,它主要负责处理用户请求,...在实践中,还可以考虑添加其他功能,如验证用户输入,提供更丰富的用户体验,以及优化数据库查询性能等。

    J2EE综合—Struts常见错误的全面总结

    **错误描述**:当使用Struts的Validator插件进行表单验证时,如果未在`validation.xml`文件中定义资源,则会出现此异常。 **解决方法**: - 创建或检查`validation.xml`文件是否包含所有需要的验证规则。 - 确保...

    【开发经验】Struts常见错误及原因分析 .doc

    确保`web.xml`中有`&lt;servlet&gt;`和`&lt;servlet-mapping&gt;`标签来标识`Struts`的`ActionServlet`,并且`&lt;filter-mapping&gt;`指向了`struts.action`。 6. 另外,还有一些其他可能的错误,如`NullPointerException`、`...

Global site tag (gtag.js) - Google Analytics