浏览 3380 次
锁定老帖子 主题:Struts验证框架的简单应用
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (3)
|
|
---|---|
作者 | 正文 |
发表时间:2009-06-20
引用 首先说Struts中验证框架的使用 1,建一个Web Project用Struts包围,这个就不多说了,注意最好用struts1.2及以上版本 2,手动配置FormBean和Action A,手动配置FormBean 在此之前新建一个Jsp页面,如下: index.jsp <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%> <%@ taglib uri="strutsHtml" prefix="html" %> <%@ taglib uri="strutsBean" prefix="bean" %> <%@ taglib uri="strutsLogic" prefix="logic" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Demo</title> </head> <body> <logic:messagesPresent> <ul> <html:messages id="error"> <li><bean:write name="error"/></li> </html:messages> </ul><hr /> </logic:messagesPresent> <center> <form action="check.do" method="post" > UserID:<input type="text" name="userID" /> Password:<input type="password" name="userpass" /> <input type="submit" name="cmd" value="login" /> </form> </center> </body> </html> 在这里使用了struts中的自定义标签,就不介绍了,在web.xml中加入以下代码即可:(加在servlet元素上边比较好) <jsp-config> <taglib> <taglib-uri>strutsHtml</taglib-uri> <taglib-location>/WEB-INF/struts-html.tld</taglib-location> </taglib> <taglib> <taglib-uri>strutsBean</taglib-uri> <taglib-location>/WEB-INF/struts-bean.tld</taglib-location> </taglib> <taglib> <taglib-uri>strutsLogic</taglib-uri> <taglib-location>/WEB-INF/struts-logic.tld</taglib-location> </taglib> </jsp-config> 然后在my包下新建一个类,如下: 注意:要使用验证框架必须让类继承ValidatorForm 在FormBean中只需声明跟他相关联的JSP页面里<form>中的属性,和属性的get/set方法即可,本例中只需声明index.jsp中的userID,userpass。注意,属姓名一定要与jsp中的名字相同。代码如下: package my; import org.apache.struts.validator.ValidatorForm; @SuppressWarnings("serial") publicclass TestForm extends ValidatorForm { private String userID; private String userpass; public String getUserID() { returnuserID; } publicvoid setUserID(String userID) { this.userID = userID; } public String getUserpass() { returnuserpass; } publicvoid setUserpass(String userpass) { this.userpass = userpass; } } 在struts-config.xml中添加<form-bean>,如下: 注:type的值要与建立的FormBean的名字相同,而且必须标明类所在的包,在此我就不把FormBean和Action分包了,都放在my包下。 <form-beans> <form-bean name="testForm" type="my.TestForm"></form-bean> </form-beans> B.配置Action 同样,在my包下新建一个类:名叫TestAction 如下: 注意,此类继承自Action 在此类中实现execute方法。暂时把返回值设置成null 代码如下: package my; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; publicclass TestAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { return mapping.findForward("ok"); } } 在struts-config.xml中配置Action: 其中path是jsp表单中action的值,name,attribute关联的是FormBean的名字, type是Action完整的类名,scope为作用域,validate在这里要设置成true,因为要做验证,input为当验证出发时,显示错误的页面 <forward>中 name为Action转发的名称,path为转发的路径,此时我们要把Action中刚才返回null的地方替换成:return mapping.findForward("ok");让Action跳转到ok.jsp 代码: <action-mappings> <action path="/check" name="testForm" attribute="testForm" type="my.TestAction" scope="request" validate="true" input="/index.jsp"> <forward name="ok" path="/ok.jsp"></forward> </action> </action-mappings> 1,开始添加验证框架。 验证框架其实就是一个struts得插件,它依赖于validator-rules.xml和validation.xml以及项目本身的资源文件(ApplicationResources.properties) 所以我们第一步先要在struts-config.xml中添加这个插件: 将validator-rules.xml的这段话: <plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value="/WEB-INF/validator-rules.xml, /WEB-INF/validation.xml"/> </plug-in> Copy到struts-config.xml中。即可完成添加,注意,插件要复制到文件的最后,当然要包含在根元素下. Values里边有两个值,说明它需要这两个文件来完成验证。 validator-rules.xml我们已经有了,下面我们需要新建一个validation.xml 在WEB-INF下新建一个xml文件。 建好之后把validator-rules.xml这段话: <!DOCTYPE form-validation PUBLIC "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN" "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd"> copy到validation.xml中。 注:validator_1_1_3.dtd 是validator-rules.xml和validation.xml文件约束文件。约束在xml文件中都有哪些元素和属性及它们之间的包含关系 Ok,暂时先不管它了,我们关注下ApplicationResources.properties 这个文件 它是整个项目的资源文件,说简单了就是起一个让你可以一劳永逸的作用,我们这里不多做解释了 Ok,我们在validator-rules.xml中找到被注释的部分中如以下标记: # Struts Validator Error Messages errors.required={0} is required. errors.minlength={0} can not be less than {1} characters. errors.maxlength={0} can not be greater than {1} characters. errors.invalid={0} is invalid. errors.byte={0} must be a byte. errors.short={0} must be a short. errors.integer={0} must be an integer. errors.long={0} must be a long. errors.float={0} must be a float. errors.double={0} must be a double. errors.date={0} is not a date. errors.range={0} is not in the range {1} through {2}. errors.creditcard={0} is an invalid credit card number. errors.email={0} is an invalid e-mail address. 这些是用来保存验证框架所提示的错误信息的,将他们copy到ApplicationResources.properties中 关于错误信息的注释: 1, 验证非空 2, 最小长度 3, 最大长度 4, 挂钩正则表达式的验证,(mask) 5, 验证为byte类型 6, 验证为short类型 7, 验证为integer类型 8, 验证为long类型 9, 验证为float类型 10, 验证为时间类型 11, 验证在xx-xx范围之内 12, 验证creditcard格式 13, 验证email格式 注意,ApplicationResources文件要选择打开方法的,用文本编辑器或者properties file editor 打开都可以。 好了,这里搞定,我们跳回到validation.xml文件,开始手写validation.xml: (程序员么,要有跳跃性思维……): 1.写根元素 <form-validation> 2.写 <formset> : 包含所有要被验证框架进行验证的表单 3.写 <form name="testForm" > : name属性对应的值一定要是struts-config.xml的form-bean中声明 4.写 <field property="user" depends="required,mask" > property一定要是form中的属性 property="user" :属性名 depends="required,mask" :套用的验证标准这个验证标准必须是在validator-rules.xml的validator元素下声明的,套用两个验证标准,就用逗号将两个标准隔开。 5.写需要传入提示信息的参数 写法一:<arg key="user.name" position="0" /> 这里key属性里面的”user.name”需要在ApplicationResources文件里边定义一下。 举个例子: 我们要验证表单中用户ID这个输入框不能为空。 第一步要在validation.xml关联,设定参数。如下: <form-validation> <formset> <form name="testForm"> <field property="userID" depends="required"> <arg key="user.id" position="0" /> </field> </form> </formset> </form-validation> 第二步要在ApplicationResources文件中定义一个参数: user.id = User’s ID 这里需要注意,变量名要与validation.xml下的key值相同,User’s ID是要显示在页面上的内容。 发布,运行后的效果: ApplicationResources文件中显示中文很麻烦,就不在这里介绍了。 再举个例子,假如我们要验证密码不能为空且长度不能小于6位: 我们所涉及的表单项为userpass,验证标准为minlength和required errors. minlength={0} can not be greater than {1} characters. 正如我们所见,这个验证标准需要两个参数。Ok,我们分两种方法来做一下: 1, 在ApplicationResources中定义参数1: <field property="userpass" depends="required,minlength"> <arg key="user.pass" position="0"/> <arg key="pass.length" position="1"/> </field> 然后要在ApplicationResources中声明参数0,参数1: user.pass = User''sPassword pass.length = 6 //定义参数1 2, 在validation.xml中定义参数1: <field property="userpass" depends="required,minlength"> <arg key="user.pass" position="0"/> <arg key="${var:minlength}" position="1" resource="false"/> <var> <var-name>minlength</var-name> <var-value>6</var-value> </var> </field> 用EL表达式将key的值传到ApplicationResources文件中,并且告诉ApplicationResources不用在那边声明变量了(resource="false") Ok.至此,一个简单的验证框架就算完成了。 文章出处:http://www.diybl.com/course/3_program/java/javashl/2008123/96954.html 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-06-20
用过几回,觉得也麻烦
又大部分是对javabean的校验 所以后来用了hibernate validator,一个javabean的定义和完整性约束都能在一个java文件里得到体现 |
|
返回顶楼 | |