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"/>  <font color="red"><html:errors property="name"/></font><p>

年龄:
<html:text property="age"/>  <font color="red"><html:errors property="age"/></font><p>
EMail:
<html:text property="email"/>  <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:我们还要添加一个拦截器,如果不添加的话,在输入的文件框中单击提交会也会出现乱码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值