通过继承ActionSupport重写validate()方法,实现数据校验,会存在大量的重复代码,
类似于struts1,Struts2也提供通过配置文件来进行数据校验,使用校验框架不必重复的编写校验代码.
Action及jsp可以不用改变
Java代码
Struts.xml
Xml代码
jsp
Html代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri ="/struts-tags"%>
<html>
<body>
<form action="regist.action" method="post">
<s:fielderror></s:fielderror>
<table>
<tr>
<td>userName:</td>
<td>
<input type="text" name="userName">
</td>
</tr>
<tr>
<td>password:</td>
<td>
<input type="text" name="password">
</td>
</tr>
<tr>
<td>age:</td>
<td>
<input type="text" name="age">
</td>
</tr>
<tr>
<td>birthday:</td>
<td>
<input type="text" name="birthday">
</td>
</tr>
<tr>
<td colspan="2">
<s:submit value="注册"></s:submit>
</td>
</tr>
</form>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri ="/struts-tags"%>
<html>
<body>
<form action="regist.action" method="post">
<s:fielderror></s:fielderror>
<table>
<tr>
<td>userName:</td>
<td>
<input type="text" name="userName">
</td>
</tr>
<tr>
<td>password:</td>
<td>
<input type="text" name="password">
</td>
</tr>
<tr>
<td>age:</td>
<td>
<input type="text" name="age">
</td>
</tr>
<tr>
<td>birthday:</td>
<td>
<input type="text" name="birthday">
</td>
</tr>
<tr>
<td colspan="2">
<s:submit value="注册"></s:submit>
</td>
</tr>
</form>
</body>
</html>
添加验证文件
在RegistAction.java同目录下添加文件名为RegistAction-validation.xml(action名-validation.xml)
Xml代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="userName">
<!-- 验证字符串不能为空 -->
<field-validator type="requiredstring">
<!-- 去空格 -->
<param name="trim">true</param>
<!-- 错误提示信息 -->
<message>userName is required</message>
</field-validator>
<!-- 验证字符串长度 -->
<field-validator type="stringlength">
<param name="minLength">5</param>
<param name="maxLength">16</param>
<message>userName should be between ${minLength} and ${maxLength}</message>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>password is required</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">5</param>
<param name="maxLength">16</param>
<message>password should be between ${minLength} and ${maxLength}</message>
</field-validator>
</field>
<!-- 验证字符串为数字 -->
<field name="age">
<field-validator type="int">
<param name="min">1</param>
<param name="max">150</param>
<message>age should be between ${min} and ${max}</message>
</field-validator>
</field>
<!-- 验证字符串为日期类型 -->
<field name="birthday">
<field-validator type="date">
<param name="min">1888-01-01</param>
<param name="max">2008-01-01</param>
<message>birthday should be between ${min} and ${max}</message>
</field-validator>
</field>
</validators>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="userName">
<!-- 验证字符串不能为空 -->
<field-validator type="requiredstring">
<!-- 去空格 -->
<param name="trim">true</param>
<!-- 错误提示信息 -->
<message>userName is required</message>
</field-validator>
<!-- 验证字符串长度 -->
<field-validator type="stringlength">
<param name="minLength">5</param>
<param name="maxLength">16</param>
<message>userName should be between ${minLength} and ${maxLength}</message>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>password is required</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">5</param>
<param name="maxLength">16</param>
<message>password should be between ${minLength} and ${maxLength}</message>
</field-validator>
</field>
<!-- 验证字符串为数字 -->
<field name="age">
<field-validator type="int">
<param name="min">1</param>
<param name="max">150</param>
<message>age should be between ${min} and ${max}</message>
</field-validator>
</field>
<!-- 验证字符串为日期类型 -->
<field name="birthday">
<field-validator type="date">
<param name="min">1888-01-01</param>
<param name="max">2008-01-01</param>
<message>birthday should be between ${min} and ${max}</message>
</field-validator>
</field>
</validators>
Struts 2.0已经实现很多常用的校验了,在jar的default.xml中的注册的
Xml代码
<validators>
<validator name ="required" class ="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator" />
<validator name ="requiredstring" class ="com.opensymphony.xwork2.validator.validators.RequiredStringValidator" />
<validator name ="int" class ="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator" />
<validator name ="double" class ="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator" />
<validator name ="date" class ="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator" />
<validator name ="expression" class ="com.opensymphony.xwork2.validator.validators.ExpressionValidator" />
<validator name ="fieldexpression" class ="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator" />
<validator name ="email" class ="com.opensymphony.xwork2.validator.validators.EmailValidator" />
<validator name ="url" class ="com.opensymphony.xwork2.validator.validators.URLValidator" />
<validator name ="visitor" class ="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator" />
<validator name ="conversion" class ="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator" />
<validator name ="stringlength" class ="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator" />
<validator name ="regex" class ="com.opensymphony.xwork2.validator.validators.RegexFieldValidator" />
</validators>
<validators>
<validator name ="required" class ="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator" />
<validator name ="requiredstring" class ="com.opensymphony.xwork2.validator.validators.RequiredStringValidator" />
<validator name ="int" class ="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator" />
<validator name ="double" class ="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator" />
<validator name ="date" class ="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator" />
<validator name ="expression" class ="com.opensymphony.xwork2.validator.validators.ExpressionValidator" />
<validator name ="fieldexpression" class ="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator" />
<validator name ="email" class ="com.opensymphony.xwork2.validator.validators.EmailValidator" />
<validator name ="url" class ="com.opensymphony.xwork2.validator.validators.URLValidator" />
<validator name ="visitor" class ="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator" />
<validator name ="conversion" class ="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator" />
<validator name ="stringlength" class ="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator" />
<validator name ="regex" class ="com.opensymphony.xwork2.validator.validators.RegexFieldValidator" />
</validators>
<message>提示信息也可以国际化,<message key=””>就可以显示资源文件里的key对应的value了
当一个Action中有多个业务方法时,每个业务方法都会使用这种验证,显然是不好的.例如Action中有方法public String regist(),我们可以为regist()专门定义一个配置文件,文件名称为RegistAction-regist-validation.xml(Action名称-方法名- validation.xml)
类似于struts1,Struts2也提供通过配置文件来进行数据校验,使用校验框架不必重复的编写校验代码.
Action及jsp可以不用改变
Java代码
package com;
import java.util.Date;
import com.opensymphony.xwork2.ActionSupport;
public class RegistAction extends ActionSupport {
private String userName;
private String password;
private Integer age;
private Date birthday;
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
@Override
public String execute() throws Exception {
return SUCCESS;
}
}
package com;
import java.util.Date;
import com.opensymphony.xwork2.ActionSupport;
public class RegistAction extends ActionSupport {
private String userName;
private String password;
private Integer age;
private Date birthday;
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
@Override
public String execute() throws Exception {
return SUCCESS;
}
}
Struts.xml
Xml代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.custom.i18n.resources" value="messageResource"></constant>
<package name="user" extends="struts-default">
<action name="regist" class="com.RegistAction">
<result name="success">/welcome.jsp</result>
<result name="input">/regist.jsp</result>
</action>
</package>
</struts>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.custom.i18n.resources" value="messageResource"></constant>
<package name="user" extends="struts-default">
<action name="regist" class="com.RegistAction">
<result name="success">/welcome.jsp</result>
<result name="input">/regist.jsp</result>
</action>
</package>
</struts>
jsp
Html代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri ="/struts-tags"%>
<html>
<body>
<form action="regist.action" method="post">
<s:fielderror></s:fielderror>
<table>
<tr>
<td>userName:</td>
<td>
<input type="text" name="userName">
</td>
</tr>
<tr>
<td>password:</td>
<td>
<input type="text" name="password">
</td>
</tr>
<tr>
<td>age:</td>
<td>
<input type="text" name="age">
</td>
</tr>
<tr>
<td>birthday:</td>
<td>
<input type="text" name="birthday">
</td>
</tr>
<tr>
<td colspan="2">
<s:submit value="注册"></s:submit>
</td>
</tr>
</form>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri ="/struts-tags"%>
<html>
<body>
<form action="regist.action" method="post">
<s:fielderror></s:fielderror>
<table>
<tr>
<td>userName:</td>
<td>
<input type="text" name="userName">
</td>
</tr>
<tr>
<td>password:</td>
<td>
<input type="text" name="password">
</td>
</tr>
<tr>
<td>age:</td>
<td>
<input type="text" name="age">
</td>
</tr>
<tr>
<td>birthday:</td>
<td>
<input type="text" name="birthday">
</td>
</tr>
<tr>
<td colspan="2">
<s:submit value="注册"></s:submit>
</td>
</tr>
</form>
</body>
</html>
添加验证文件
在RegistAction.java同目录下添加文件名为RegistAction-validation.xml(action名-validation.xml)
Xml代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="userName">
<!-- 验证字符串不能为空 -->
<field-validator type="requiredstring">
<!-- 去空格 -->
<param name="trim">true</param>
<!-- 错误提示信息 -->
<message>userName is required</message>
</field-validator>
<!-- 验证字符串长度 -->
<field-validator type="stringlength">
<param name="minLength">5</param>
<param name="maxLength">16</param>
<message>userName should be between ${minLength} and ${maxLength}</message>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>password is required</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">5</param>
<param name="maxLength">16</param>
<message>password should be between ${minLength} and ${maxLength}</message>
</field-validator>
</field>
<!-- 验证字符串为数字 -->
<field name="age">
<field-validator type="int">
<param name="min">1</param>
<param name="max">150</param>
<message>age should be between ${min} and ${max}</message>
</field-validator>
</field>
<!-- 验证字符串为日期类型 -->
<field name="birthday">
<field-validator type="date">
<param name="min">1888-01-01</param>
<param name="max">2008-01-01</param>
<message>birthday should be between ${min} and ${max}</message>
</field-validator>
</field>
</validators>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="userName">
<!-- 验证字符串不能为空 -->
<field-validator type="requiredstring">
<!-- 去空格 -->
<param name="trim">true</param>
<!-- 错误提示信息 -->
<message>userName is required</message>
</field-validator>
<!-- 验证字符串长度 -->
<field-validator type="stringlength">
<param name="minLength">5</param>
<param name="maxLength">16</param>
<message>userName should be between ${minLength} and ${maxLength}</message>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>password is required</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">5</param>
<param name="maxLength">16</param>
<message>password should be between ${minLength} and ${maxLength}</message>
</field-validator>
</field>
<!-- 验证字符串为数字 -->
<field name="age">
<field-validator type="int">
<param name="min">1</param>
<param name="max">150</param>
<message>age should be between ${min} and ${max}</message>
</field-validator>
</field>
<!-- 验证字符串为日期类型 -->
<field name="birthday">
<field-validator type="date">
<param name="min">1888-01-01</param>
<param name="max">2008-01-01</param>
<message>birthday should be between ${min} and ${max}</message>
</field-validator>
</field>
</validators>
Struts 2.0已经实现很多常用的校验了,在jar的default.xml中的注册的
Xml代码
<validators>
<validator name ="required" class ="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator" />
<validator name ="requiredstring" class ="com.opensymphony.xwork2.validator.validators.RequiredStringValidator" />
<validator name ="int" class ="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator" />
<validator name ="double" class ="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator" />
<validator name ="date" class ="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator" />
<validator name ="expression" class ="com.opensymphony.xwork2.validator.validators.ExpressionValidator" />
<validator name ="fieldexpression" class ="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator" />
<validator name ="email" class ="com.opensymphony.xwork2.validator.validators.EmailValidator" />
<validator name ="url" class ="com.opensymphony.xwork2.validator.validators.URLValidator" />
<validator name ="visitor" class ="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator" />
<validator name ="conversion" class ="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator" />
<validator name ="stringlength" class ="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator" />
<validator name ="regex" class ="com.opensymphony.xwork2.validator.validators.RegexFieldValidator" />
</validators>
<validators>
<validator name ="required" class ="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator" />
<validator name ="requiredstring" class ="com.opensymphony.xwork2.validator.validators.RequiredStringValidator" />
<validator name ="int" class ="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator" />
<validator name ="double" class ="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator" />
<validator name ="date" class ="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator" />
<validator name ="expression" class ="com.opensymphony.xwork2.validator.validators.ExpressionValidator" />
<validator name ="fieldexpression" class ="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator" />
<validator name ="email" class ="com.opensymphony.xwork2.validator.validators.EmailValidator" />
<validator name ="url" class ="com.opensymphony.xwork2.validator.validators.URLValidator" />
<validator name ="visitor" class ="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator" />
<validator name ="conversion" class ="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator" />
<validator name ="stringlength" class ="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator" />
<validator name ="regex" class ="com.opensymphony.xwork2.validator.validators.RegexFieldValidator" />
</validators>
<message>提示信息也可以国际化,<message key=””>就可以显示资源文件里的key对应的value了
当一个Action中有多个业务方法时,每个业务方法都会使用这种验证,显然是不好的.例如Action中有方法public String regist(),我们可以为regist()专门定义一个配置文件,文件名称为RegistAction-regist-validation.xml(Action名称-方法名- validation.xml)