如何使用struts2对集合参数进行验证
2011-09-22 23:39
483 查看
上一节介绍了struts2可以支持批量表单参数提交,那么提交到后台时如何利用strust2的validation框架对这个集合做验证?
struts2提供了一个vistor校验器,可以实现这个需求
还是采用上一节中批量添加书籍的例子
1.jsp文件
4.在AddBookAction.java同目录下建立AddBookAction-validation.xml文件,用来对该action验证
${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提供了一个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对集合参数进行验证
- 学习笔记: Struts2中使用validate框架对Action的不同方法进行验证
- 分享如何使用PHP将URL地址参数进行加密传输提高网站安全性
- Struts2使用validation.xml验证时,如何显示字段的标签(未解决)
- 使用优雅方式对参数验证进行处理
- 使用润乾参数模板后如何对参数进行二次处理
- 分享如何使用PHP将URL地址参数进行加密传输提高网站安全性
- 接口测试入门(3)--使用httpClient进行登录用例操作/set-cookies验证/ List<NameValuePair>设置post参数/json解析
- JAVA_WEB Struts2学习:使用验证框架进行校验JSP页面元素 反编译工具的配置 Strtuts2 国际化学习
- 回发或回调参数无效。在配置中使用 或在页面中使用 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。
- struts2中使用xml进行validation验证的两种方式
- 如何使用验证控件对DropDownList进行验证
- 如何使用JavaScript和正则表达式进行数据验证
- 如何使用loadrunner进行并发测试,设置集合点
- jquery validation remote进行唯一性验证时只使用自定义参数,不使用默认参数
- 再说表单验证,在Web Api中使用ModelState进行接口参数验证
- 在Struts2使用集合对象保存表单提交参数
- 如何在IIS7上配置 FTP7并使用IIS管理凭据方式进行验证?
- java如何对map进行排序详解(map集合的使用)
- 系列 《使用sklearn进行集成学习——理论》 《使用sklearn进行集成学习——实践》 目录 1 Random Forest和Gradient Tree Boosting参数详解 2 如何调参?