`

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:我们还要添加一个拦截器,如果不添加的话,在输入的文件框中单击提交会也会出现乱码
分享到:
评论
2 楼 wxl123 2013-11-14  
wxl123 写道
[u][/u]     

1 楼 wxl123 2013-11-14  
[u][/u]     

相关推荐

Global site tag (gtag.js) - Google Analytics