作为一个刚入门的程序猿,最近学习各种头疼。今天看了看struts的数据验证机制,现在对自己总结一番。注:部分内容来自其他博客
1 在Struts2的API中,ActionSupport类对Validateable接口进行了实现,但对validate()方法的实现却是一个空实现,通常情况下,我们所创建的Action对象,都是通过继承ActionSupport类进行创建,所以,在继承ActionSupport类的情况下,如果通过validate()方法验证数据的有效性,直接重写validate()方法。使用validate()方法可以对用户请求的多个Action方法的进行验证,但其验证的逻辑是相同的,如果在一个Action类中编写了多个请求处理方法,而此Action重写了validate()方法,那么,默认情况下,在执行每一个请求方法的过程中,都会经过validate()方法的验证处理。
2验证文件的命名规则?
1)ActionName-validation.xml方式命名
适用于:Action对象中只存在单一的处理方法或在多个请求处理方法中,验证处理的规则都相同。
2)ActionName-AliasName-validation.xml方式命名
适用于:Action对象中有多个请求处理方法,而只需对特定的请求处理方法进行验证。
3 先来看一个简单的例子
3.1 下图为本例的树形结构。其中需要注意的是,验证文件UserAction-validation.xml必须放置在UserAction所在的包中。
![包的结构](https://img-blog.csdn.net/20140514161246484?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcmFiYml0cm9vbQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
3.2 index.jsp界面文件,实现一个简单的登陆界面。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!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=UTF-8">
<title>用户登录</title>
<style type="text/css">
*{font-size: 12px;}
</style>
</head>
<body>
<s:form action="userAction" method="post">
<s:textfield name="username" label="用户名" required="true"></s:textfield>
<s:password name="password" label="密码" required="true"></s:password>
<s:submit key="submit" value="登录"></s:submit>
</s:form>
</body>
</html>
3.3 验证框架UserAction-validation.xml
UserAction-validation.xml是UserAction对象的验证文件,当执行UserAction对象时,Struts2会加载验证文件对UserAction中的内容进行验证处理。验证用户名和密码是否为空,当为空时会自己提醒。name需要一一对应。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.3//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd" >
<validators>
<!-- 验证用户名 -->
<field name="username">
<field-validator type="requiredstring">
<message>请输入用户名</message>
</field-validator>
</field>
<!-- 验证密码 -->
<field name="password">
<field-validator type="requiredstring">
<message>请输入密码</message>
</field-validator>
</field>
</validators>
4、Struts2的内置验证器
4.1 required验证器
<validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
用于验证输入的数据是否为null,如果数据值为null,则验证失败。
4.2 requiredstring验证器
<validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
用于验证输入的诗句是否为空的字符串,如果数据值为空的字符串”“,则验证失败。
包含一个boolean类型的参数trim,用于设置是否调用String类的String类的trim()方法去除输入字符串的首尾空字符,默认为true。
4.3 int验证器、long验证器、short验证器、double验证器、date验证器
<validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
用于验证输入的数据是否为整型、长整型、短整型、双精度浮点数值、日期型数值
参数:
min:用于设置参数的最小值; max:用于设置参数的最大值
double验证器有4个参数:minInclusive、 maxInclusive、 minExclusive、 maxExclusive
4.4 expression验证器
<validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
根据值栈中的OGNL表达式进行验证,例如:
<validators>
<validator type="expression">
<param name="expression">password==confirmPassword</param>
<message>密码与确认密码必须相同</message>
</validator>
</validators>
4.5 fieldexpression验证器
<validator name="fieldexrpession" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
根据OGNL表达式对字段进行验证,返回true则验证通过。
<validators>
<validator type="fieldexpression">
<param name="filedName">confirmPassword</param>
<param name="expression">password==confirmPassword</param>
<message>密码与确认密码必须相同</message>
</validator>
</validators>
4.6 email验证器
<validator name="email" class="com.opensy^mphony.xwork2.validator.validators.EmailValidator"/>
判断输入数据是否与以下正则表达式相匹配:
\\b(^['_A-Za-z0-9-]+('_A-Za-z0-9-]+)*@([A-Za-z0-9])+(\\A-Za-z0-9-]+)*((\\.[A-Za-z0-9]{2,})|(\\.[A-Za-z0-9]{2,}\\.[A-Za-z0-9]{2,}))$)\\b
4.7 url验证器
<validator name="url" class="com.opensy^mphony.xwork2.validator.validators.URLValidator"/>
4.8 conversion验证器
<validator name="conversion" class="com.opensy^mphony.xwork2.validator.validators.ConversionErrorValidator"/>
4.9 stringlength验证器
<validator name="stringlength" class="com.opensy^mphony.xwork2.validator.validators.StrigLengthFieldValidator"/>
验证输入的数据是否在指定的字符串长度之内。
4.10 regex验证器
<validator name="regex" class="com.opensy^mphony.xwork2.validator.validators.RegexFieldValidator"/>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!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=UTF-8">
<title>用户登录</title>
<style type="text/css">
*{font-size: 12px;}
</style>
</head>
<body>
<s:form action="userAction" method="post">
<s:textfield name="username" label="用户名" required="true"></s:textfield>
<s:password name="password" label="密码" required="true"></s:password>
<s:submit key="submit" value="登录"></s:submit>
</s:form>
</body>
</html>
3.3 验证框架UserAction-validation.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.3//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd" >
<validators>
<!-- 验证用户名 -->
<field name="username">
<field-validator type="requiredstring">
<message>请输入用户名</message>
</field-validator>
</field>
<!-- 验证密码 -->
<field name="password">
<field-validator type="requiredstring">
<message>请输入密码</message>
</field-validator>
</field>
</validators>
用于验证输入的数据是否为null,如果数据值为null,则验证失败。<validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
用于验证输入的诗句是否为空的字符串,如果数据值为空的字符串”“,则验证失败。<validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
用于验证输入的数据是否为整型、长整型、短整型、双精度浮点数值、日期型数值<validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
<validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
4.5 fieldexpression验证器<validators>
<validator type="expression">
<param name="expression">password==confirmPassword</param>
<message>密码与确认密码必须相同</message>
</validator>
</validators>
根据OGNL表达式对字段进行验证,返回true则验证通过。<validator name="fieldexrpession" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
<validators>
<validator type="fieldexpression">
<param name="filedName">confirmPassword</param>
<param name="expression">password==confirmPassword</param>
<message>密码与确认密码必须相同</message>
</validator>
</validators>
判断输入数据是否与以下正则表达式相匹配:<validator name="email" class="com.opensy^mphony.xwork2.validator.validators.EmailValidator"/>
4.7 url验证器\\b(^['_A-Za-z0-9-]+('_A-Za-z0-9-]+)*@([A-Za-z0-9])+(\\A-Za-z0-9-]+)*((\\.[A-Za-z0-9]{2,})|(\\.[A-Za-z0-9]{2,}\\.[A-Za-z0-9]{2,}))$)\\b
4.8 conversion验证器<validator name="url" class="com.opensy^mphony.xwork2.validator.validators.URLValidator"/>
4.9 stringlength验证器<validator name="conversion" class="com.opensy^mphony.xwork2.validator.validators.ConversionErrorValidator"/>
验证输入的数据是否在指定的字符串长度之内。<validator name="stringlength" class="com.opensy^mphony.xwork2.validator.validators.StrigLengthFieldValidator"/>
<validator name="regex" class="com.opensy^mphony.xwork2.validator.validators.RegexFieldValidator"/>