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中,验证是一个重要的部分,它确保用户输入的数据符合应用程序的预期格式和规则。本篇文章主要关注的是Struts2中的集合验证,即如何验证数组、列表或其他集合类型的用户输入。 `CollectionFieldValidator`...
本篇文章主要关注Struts2中的常用标签,这些标签大大简化了Web开发中的一些常见任务。 首先,我们要明白Struts2标签库与Struts1.x的不同之处。在Struts1.x中,标签库按照功能划分为HTML、Tiles、Logic和Bean等几个...
作者处处从实战出发,在丰富的示例中直观地探讨了许多实用的技术,如数据类型转换、文件上传和下载、提高Struts 2应用的安全性、调试与性能分析、FreeMarker、Velocity、Ajax,等等。跟随作者一道深入Struts 2,聆听...
1. 数据绑定:在Struts2中,用户表单提交的数据可以通过OGNL自动绑定到Action类的属性上,减少了手动设置值的工作量。 2. 视图渲染:视图层(如JSP)通过OGNL表达式访问Action的属性,动态生成HTML内容。 3. 表达式...
在Struts2中,标签是核心组件之一,它们极大地简化了JSP页面的编写,提高了代码的可读性和可维护性。 Struts2的标签库相比Struts1.x有了显著的改进和扩展。在Struts1.x中,标签库被分为几个部分,包括HTML、Tiles、...
在这个学习笔记和测试源代码中,我们将专注于Struts2中的OGNL(Object-Graph Navigation Language)表达式,这是一种强大的表达式语言,用于在Java对象图中导航和操作数据。 OGNL是Struts2框架的核心部分,它允许...
Struts2、MyBatis和Spring的整合是Java Web开发中常见的技术栈,通常被称为SSM框架。这个组合提供了模型-视图-控制器(MVC)架构的支持,数据持久层的处理以及依赖注入的能力,使得开发者能够高效地构建可维护、可...
Struts 的工作机制包括加载初始化 ActionServlet、从 struts-config.xml 文件中读取配置信息、检索和用户请求匹配的 ActionMapping 实例、创建 ActionForm 对象、表单验证、将请求转发给相应的 Action 等步骤。...
书中介绍了如何利用Struts 2 来解决Web 应用开发中的常见问题,同时还深入浅出地探讨了许多能帮助程序员编写Struts 2 应用程序的技巧,如管理页面导航活动、输入验证、国际化和本地化、对Ajax 的支持,等等。书中...
在探讨Struts2.5中的`web.xml`配置时,我们首先需要理解`web.xml`在Java Web应用中的角色以及它如何与Struts框架交互。`web.xml`是Java Web应用的核心配置文件之一,用于定义应用程序级别的配置信息,如过滤器、监听...
在这个实例中,我们主要关注Struts1的标签应用,以及如何在JSP页面中使用这些标签。 首先,我们看到`TagForm.java`这个类,它是Struts1中的一个ActionForm。ActionForm是Struts1中处理用户请求数据的核心组件,它...
2. **检查配置**:确保 Struts 配置文件 `struts-config.xml` 中正确地指定了资源文件路径。 3. **检查 JSP 页面**:确保 `<bean:message>` 标签中的 `key` 属性值正确无误。 #### 四、No getter method for ...
2. **检查 struts-config.xml 文件**:确认配置文件中正确指定了要使用的资源文件路径。 3. **检查国际化配置**:如果使用了多语言支持,确保不同语言版本的资源文件均存在且键值对应正确。 #### 五、No getter ...
2. **FormBean 中的 validate 方法**:在 FormBean 类中实现 validate 方法来进行表单验证。 #### 九、Struts 的设计模式 **MVC 模式**: - **Model**(模型):负责业务逻辑处理,通常通过 JavaBeans 实现。 - **...
- **异常描述**:在 Struts 配置文件 `struts-config.xml` 中定义了一个 ActionForm,但 `type` 属性指定的类不存在或者在 Action 的定义中,`name` 或 `attribute` 属性指定的 ActionForm 不存在。 - **解决方案**...
Struts 是一个基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架,它主要负责处理用户请求,...在实践中,还可以考虑添加其他功能,如验证用户输入,提供更丰富的用户体验,以及优化数据库查询性能等。
**错误描述**:当使用Struts的Validator插件进行表单验证时,如果未在`validation.xml`文件中定义资源,则会出现此异常。 **解决方法**: - 创建或检查`validation.xml`文件是否包含所有需要的验证规则。 - 确保...
确保`web.xml`中有`<servlet>`和`<servlet-mapping>`标签来标识`Struts`的`ActionServlet`,并且`<filter-mapping>`指向了`struts.action`。 6. 另外,还有一些其他可能的错误,如`NullPointerException`、`...