`
jgsj
  • 浏览: 961931 次
文章分类
社区版块
存档分类
最新评论

如何使用struts2对集合参数进行验证

 
阅读更多

上一节介绍了struts2可以支持批量表单参数提交,那么提交到后台时如何利用strust2的validation框架对这个集合做验证?

struts2提供了一个vistor校验器,可以实现这个需求

还是采用上一节中批量添加书籍的例子

1.jsp文件

<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
  <head>
  </head>
  <body>
  	<s:set id="currentDate" value="new java.util.Date()"></s:set>
  	<s:property value="#currentDate" />
  	<s:fielderror></s:fielderror>
  	<s:actionerror/>
  	<s:form action="addBook" method="post">
  		<s:iterator value="new int[3]" var="book" status="status">
  			<label>Name:</label>
  			<s:textfield name="%{'books['+#status.index+'].name'}" theme="simple"></s:textfield>
  			<label>Price:</label>
  			<s:textfield name="%{'books['+#status.index+'].price'}" theme="simple"></s:textfield>
  			<br/>
  		</s:iterator>
  		<s:submit value="Add"></s:submit>
  	</s:form>
  </body>
</html>
2.后台Action类

package com.crazycoder2010.struts2.action;

import java.util.ArrayList;
import java.util.List;

import com.crazycoder2010.struts2.bean.Book;
import com.opensymphony.xwork2.ActionSupport;

public class AddBookAction extends ActionSupport {
	private static final long serialVersionUID = 8136233165580827673L;
	private List<Book> books = new ArrayList<Book>();
	
	public List<Book> getBooks() {
		return books;
	}

	public void setBooks(List<Book> books) {
		this.books = books;
	}

	@Override
	public String execute() throws Exception {
		for(Book book : books){
			System.out.println(book.getName()+":"+book.getPrice());
		}
		return SUCCESS;
	}
}
3.在Book类所在的包下建立一个Book-bookContext-validation.xml文件,该文件配置的是对Book对象的校验规则

<!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator 1.0.2//EN"
        "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<validators>
    <field name="name">
        <field-validator type="requiredstring">
            <message>Name is required.</message>
        </field-validator>
        <field-validator type="stringlength">
        	<param name="minLength">2</param>
        	<param name="maxLength">10</param>
        	<param name="trim">true</param>
            <message>Name must be ${minLength}-${maxLength}.</message>
        </field-validator>
    </field>
    <field name="price">
    	<field-validator type="int">
            <message>Price must be int.</message>
        </field-validator>
    </field>
</validators>
name和price分别是Book类的两个属性

4.在AddBookAction.java同目录下建立AddBookAction-validation.xml文件,用来对该action验证

<!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator 1.0.2//EN"
        "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<validators>
    <field name="books">
        <field-validator type="visitor">
        	<param name="context">bookContext</param>   
        	<param name="appendPrefix">true</param>
            <message>Some ERROR:</message>
        </field-validator>
    </field>
</validators>
这个时候我们的field的name为books,和后台的private List<Book> books;相对应-也与页面上的book[0].name,books[1].price等元素保持一致,引用校验器遵循一下规则

${model类名}-${context}-validation.xml,特别注意的是这个xml文件必须是和你的model类放在统一个目录下,visitor有个<mesaage>Some ERROR:</message>表示验证出错后每个错误前都会先显示这段文字

5.整体看一下各个类的关系



6.运行一下,看看效果

小结:

优势:

1.visitor提供了一种校验规则复用的原则,一组规则可以被多个地方引用(Book-bookContext-validation.xml)
2.可以对集合属性进行校验

不足:

1.校验文件过于分散,如Book-bookContext-validaiton.xml文件必须放置在model包里,而我们的引用却在action层下--不够直观

2.出错信息不能精确定位到元素上--因为所有的元素都是同样的名字--这个不知道有没有办法解决

分享到:
评论

相关推荐

    Struts2 in action中文版

    8.1.1 页面上:如何使用自定义结果组件构建Struts 2 Ajax应用程序 171 8.1.2 实现JSON结果类型 173 8.2 常用的结果类型 180 8.2.1 RequestDispatcher,也叫做dispatcher 180 8.2.2 ServletRedirectResult,也叫做...

    达内java培训目录

    Struts2 Struts2核心控制流程、Ognl、Action、Interceptor、Result、FreeMarker、Struts2标记库、Struts2扩展、Struts2应用技巧(输入验证、消息国际化、文件上传和下载、防止重复提交等)。 熟练掌握Struts2核心...

    Spring in Action(第二版 中文高清版).part2

    16.2 协同使用Spring和WebWork 2/Struts 2 16.3 集成Spring和Tapestry 16.3.1 集成Spring和Tapestry 3 16.3.2 集成Spring和Tapestry 4 16.4 协同使用Spring和JSF 16.4.1 解析JSF管理的属性 16.4.2 解析Spring...

    Spring in Action(第2版)中文版

    16.2协同使用spring和webwork2/struts2 16.3集成spring和tapestry 16.3.1集成spring和tapestry3 16.3.2集成spring和tapestry4 16.4协同使用spring和jsf 16.4.1解析jsf管理的属性 16.4.2解析springbean 16.4.3...

    Spring in Action(第二版 中文高清版).part1

    16.2 协同使用Spring和WebWork 2/Struts 2 16.3 集成Spring和Tapestry 16.3.1 集成Spring和Tapestry 3 16.3.2 集成Spring和Tapestry 4 16.4 协同使用Spring和JSF 16.4.1 解析JSF管理的属性 16.4.2 解析Spring...

    Spring面试题

    5.一对多集合使用Bag,多对多集合使用Set 6. 继承类使用显式多态 7. 表字段要少,表关联不要怕多,有二级缓存撑腰 7. Struts工作机制?为什么要使用Struts? 工作机制: Struts的工作流程: 在web应用启动时就会...

    外文翻译 stus MVC

    Struts is a set of cooperating classes, servlets, and JSP tags that make up a reusable MVC 2 design. This definition implies that Struts is a framework, rather than a library, but Struts also contains...

    spring杂谈 作者zhang KaiTao

    1.8 Spring3.1 对Bean Validation规范的新支持(方法级别验证) 1.9 Spring对事务管理的支持的发展历程(基础篇) 1.10 基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)到底有什么区别。 ...

    Java学习笔记-个人整理的

    \contentsline {chapter}{Contents}{2}{section*.1} {1}Java基础}{17}{chapter.1} {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{...

    李兴华Java Web开发实战经典(高清版) Part2

    10.3、集合操作 10.4、在MVC中应用表达式语言 10.5、运算符 10.6、本章摘要 10.7、开发实战讲解(基于Oracle数据库) 第11章 Tomcat数据源 11.1、数据源操作原理 11.2、在Tomcat中使用数据库连接池 ...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    3.5 使用验证器进行输入校验 161 3.5.1 输入校验概述 161 3.5.2 JSF内置校验器 162 3.5.3 校验失败后的错误消息 163 3.5.4 必填校验器 165 3.6 自定义校验器 166 3.6.1 开发自定义校验器 166 3.6.2 注册校验器 167 ...

    java面试题

    Struts的validate框架是如何验证的? 74 72.11. dispatchAction是用什么技术实现的? 74 72.12. struts2.0的mvc模式?与struts1.0的区别? 74 72.13. struts1.2和struts2.0的区别?如何控制两种框架中的单例模式? ...

    java web 视频、电子书、源码(李兴华老师出版)

    10.3、集合操作 10.4、在MVC中应用表达式语言 10.5、运算符 10.6、本章摘要 10.7、开发实战讲解(基于Oracle数据库) 第11章 Tomcat数据源 11.1、数据源操作原理 11.2、在Tomcat中使用数据库连接池 ...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 上

    10.3、集合操作 10.4、在MVC中应用表达式语言 10.5、运算符 10.6、本章摘要 10.7、开发实战讲解(基于Oracle数据库) 第11章 Tomcat数据源 11.1、数据源操作原理 11.2、在Tomcat中使用数据库连接池 11.3、...

    MLDN+李兴华+Java+Web开发实战经典.part3.rar )

    10.3、集合操作 10.4、在MVC中应用表达式语言 10.5、运算符 10.6、本章摘要 10.7、开发实战讲解(基于Oracle数据库) 第11章 Tomcat数据源 11.1、数据源操作原理 11.2、在Tomcat中使用数据库连接池 ...

    李兴华 java_web开发实战经典 源码 完整版收集共享

    10.3、集合操作 10.4、在MVC中应用表达式语言 10.5、运算符 10.6、本章摘要 10.7、开发实战讲解(基于Oracle数据库) 第11章 Tomcat数据源 11.1、数据源操作原理 11.2、在Tomcat中使用数据库连接池 11.3、...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 下

    10.3、集合操作 10.4、在MVC中应用表达式语言 10.5、运算符 10.6、本章摘要 10.7、开发实战讲解(基于Oracle数据库) 第11章 Tomcat数据源 11.1、数据源操作原理 11.2、在Tomcat中使用数据库连接池 11.3、...

    李兴华Java Web开发实战经典.pdf (高清版) Part1

    10.3、集合操作 10.4、在MVC中应用表达式语言 10.5、运算符 10.6、本章摘要 10.7、开发实战讲解(基于Oracle数据库) 第11章 Tomcat数据源 11.1、数据源操作原理 11.2、在Tomcat中使用数据库连接池 ...

Global site tag (gtag.js) - Google Analytics