首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

struts的validate步骤验证

2012-10-06 
struts的validate方法验证输入校验是所有WEB应用必须处理的问题,输入校验分为客户端校验和服务器端校验。客

struts的validate方法验证
    输入校验是所有WEB应用必须处理的问题,输入校验分为客户端校验和服务器端校验。客户端校验主要通过JavaScript代码来完成,服务器端校验通常在应用中编程实现。
   本文是基于服务器端的方法校验,利用validate框架来实现的。使用validate框架可以无需在ActionForm的子类中覆盖validate方法就可以很方便的验证客户端的提交数据。由于validate框架内置了很多预定义的验证机制,如验证Email是否合法等。所以在一般情况下,只需要配置XML文件就可以满足我们的验证需求。使用validate框架,比直接使用validate方法验证给我们带来的好处:
1.更容易维护。验证信息在一个配置文件中,所有更加利于今后维护这些验证信息。
2.标准化。如用户名和密码都要求由字母和数字组成。如果将这些验证都写在validate方法中,对这些验证进行标准化非常困难。而在validate框架中的验证机制都是预先定义的,一次,对validate框架来说是件非常容易的事。
3.避免重造轮子。减少代码的数量
    下面介绍下详细的配置工作。
   首先,安装validate的插件。在struts-config.xml中,添加如下的代码:
  

<plug-in className="org.apache.struts.validator.ValidatorPlugIn">     <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validator.xml" /> </plug-in>   

    其中的set-property元素设置了插件pathnames的属性值,包括两个xml文件。
(1)validate-rules.xml。系统会在lib下自动生成这个配置文件
(2)而validate.xml文件需要我们自己配置。
    validate.xml的代码如下(此代码可以扩展,可以根据自己的需要修改):
  
  <?xml version="1.0" encoding="GBK"?><!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"><form-validation><formset><form name="firstValidatorForm"><field property="name" depends="required,maxlength,minlength,mask"><msg name="required" key="error.name.blank"/><msg name="minlength" key="error.name.minLength"/><msg name="maxlength"  key="error.name.maxLength"/><msg name="mask" key="error.name.alphanum"/><arg name="minlength" key="${var:minlength}" position="0" resource="false"/><arg name="maxlength" key="${var:maxlength}" position="0" resource="false"/><var><var-name>minlength</var-name><var-value>5</var-value></var><var><var-name>maxlength</var-name><var-value>10</var-value></var><var><var-name>mask</var-name><var-value>^[a-zA-Z0-9]*$</var-value></var></field><field property="age" depends="required,integer,intRange"><msg name="required" key="error.age.blank"/><msg name="integer" key="error.age.integer"/><msg name="intRange" key="error.age.intRange"/><arg name="intRange" key="${var:min}" position="0" resource="false"/><arg name="intRange" key="${var:max}" position="1" resource="false"/><var><var-name>min</var-name><var-value>18</var-value></var><var><var-name>max</var-name><var-value>60</var-value></var></field><field property="email" depends="required,email"><msg name="required" key="error.email.blank"/><msg name="email" key="error.email.invalid"/></field></form></formset></form-validation>   

然后,我们建立一个例子进行测试。建立FirstValidatorForm.java它必须继承ValidateForm。
package actionform;import org.apache.struts.validator.ValidatorForm;public class FirstValidatorForm extends ValidatorForm {    private String name;    public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}private String age;    private String email;}

下一个是action的配置,随便写下为了测试。
package action;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;public class ValidatorAction extends Action {public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception {response.setCharacterEncoding("GBK");try{response.getWriter().println("验证成功!");}catch(Exception e){}return null;}}

struts-config.xml的具体代码:
<?xml version="1.0" encoding="GBK"?><!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"><struts-config><data-sources /><form-beans><form-bean name="firstValidatorForm" type="actionform.FirstValidatorForm"/></form-beans><global-exceptions /><global-forwards />  <action-mappings >           <action        attribute="firstValidatorForm"   name="firstValidatorForm"        path="/firstValidator"       scope="request"       validate="true"       type="action.ValidatorAction"       input="/firstValidator.jsp">       </action></action-mappings><message-resources parameter="com.yourcompany.struts.ApplicationResources" /><plug-in className="org.apache.struts.validator.ValidatorPlugIn">     <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validator.xml" /> </plug-in> </struts-config>

firstvalidate.jsp的代码:
<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK"%><%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=GBK"><title>Insert title here</title></head><body><html:form action="firstValidator">姓名:<html:text property="name"/>&nbsp;&nbsp;<font color="red"><html:errors property="name"/></font><p>年龄:<html:text property="age"/>&nbsp;&nbsp;<font color="red"><html:errors property="age"/></font><p>EMail:<html:text property="email"/>&nbsp;&nbsp;<font color="red"><html:errors property="email"/></font><p><html:submit value="提交"/> </html:form></body></html>

下一个比较重要的文件时配置错误提示的国际化资源文件:
即struts自动生成的文件ApplicationResources中添加如下的代码:
# Resources for parameter 'com.yourcompany.struts.ApplicationResources'
# Project validate
error.name.blank=姓名不能为空
error.name.minLength=姓名长度不能小于5
error.name.maxLength=姓名长度不能大于5
error.name.alphanum=姓名必须是数字或字母
error.age.blank=年龄不能为空
error.age.integer=年龄为整数
error.age.intRange=年龄在{0}与{1}之间
error.email.blank=邮箱不能为空
error.email.invalid=邮箱不合法
注意1:我们都知道国际化文件支持ISO-88599-1,因此必须转换代码格式。否则页面出现乱码的。这里的代码我们可用jdk自带的native2ascii的编译工具将上面的代码转换为GBK的生成的,转换结果如下。(详细介绍在下一篇文章中说明。)
# Resources for parameter 'com.yourcompany.struts.ApplicationResources'
# Project validate
error.name.blank=\u59d3\u540d\u4e0d\u80fd\u4e3a\u7a7a
error.name.minLength=\u59d3\u540d\u957f\u5ea6\u4e0d\u80fd\u5c0f\u4e8e5
error.name.maxLength=\u59d3\u540d\u957f\u5ea6\u4e0d\u80fd\u5927\u4e8e5
error.name.alphanum=\u59d3\u540d\u5fc5\u987b\u662f\u6570\u5b57\u6216\u5b57\u6bcd
error.age.blank=\u5e74\u9f84\u4e0d\u80fd\u4e3a\u7a7a
error.age.integer=\u5e74\u9f84\u4e3a\u6574\u6570
error.age.intRange=\u5e74\u9f84\u5728{0}\u4e0e{1}\u4e4b\u95f4
error.email.blank=\u90ae\u7bb1\u4e0d\u80fd\u4e3a\u7a7a
error.email.invalid=\u90ae\u7bb1\u4e0d\u5408\u6cd5
注意2:我们还要添加一个拦截器,如果不添加的话,在输入的文件框中单击提交会也会出现乱码

热点排行