基于XML配置方式对指定action方法实现输入校验:
当校验文件的取名为ActionClassName-validation.xml时,会对action中的所有处理方法实现输入验证。
如果你只需要对action中的某个action方法实现校验,那么,校验文件的取名应为:ActionClassName-ActionName-validation.xml,
其中ActionName为struts.xml中action的名称。例如:在实际应用中,常有以下配置:
<package name="itcast" namespace="/person" extends="struts-default">
<action name="list_*" class="cn.itcast.a_action.PersonAction" method="{1}">
<result name="input">/index.jsp</result>
<result name="message">/WEB-INF/page/message.jsp</result>
</action>
</package>
PersonAction中有以下两个处理方法:
public String update(){
...
}
public String save(){
...
}
要对update()方法实施验证,校验文件的取名为:PersonAction-list_update-validation.xml
要对save()方法实现验证书,校验文件的取名为:PersonAction-list_save-validation.xml
基于XML校验的一些特点:
当为某个action提供了ActionClassName-validation.xml和ActionClassName-ActionName-validation.xml
两种规则的校验文件时,系统按下面顺序寻找校验文件:
1,ActionClassName-validation.xml
2,ActionClassName-ActionName-validation.xml
系统寻找到第一个校验文件时还会继续搜索后面的校验文件,当搜索到所有校验文件时,会所校验文件
里的所有校验规则汇总,然后全部应用于action方法的校验。如果两个校验文件中指定的校验南侧则冲突,
则只使用后面文件中的校验规则。
当action继承了另一个action,父类action的校验文件会先被搜过到。
假设UserAction继承BaseAction:
<action name="user" class="cn.itcast.action.UserAction" menthod="{1}">
</action>
访问上面action,系统先搜父类的校验文件:BaseAction-validation.xml,BaseAction-user-validation.xml,
接着搜索子类的校验文件:UserAction-validation.xml,UserAction-user-validation.xml。
应用于上面action的校验规则为这四个文件的总和。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 指定默认编码集,作用于HttpServletRequest的setCharacterEncoding方法和freemarker、velocity的输入 -->
<constant name="struts.i18n.encoding" value="UTF-8" />
<!-- 该属性指定需要struts2外理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由struts2处理。 如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。 -->
<constant name="struts.action.extension" value="com,action" />
<!-- 当struts的配置文件修改后,系统是否自动更新该文件,默认认值为false(生产环境下使作),开发阶断最好打开 -->
<constant name="struts.configuration.xml.reload" value="true" />
<!-- 引用其它struts.xml配置文件 -->
<include file="struts_validata.xml"/>
</struts>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="itcast" namespace="/person" extends="struts-default">
<action name="list_*" class="cn.itcast.a_action.PersonAction" method="{1}">
<result name="input">/index.jsp</result>
<result name="message">/WEB-INF/page/message.jsp</result>
</action>
</package>
</struts>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<field name="username">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>用户名不能为空!</message>
</field-validator>
</field>
<field name="mobile">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>手机号不能为空!</message>
</field-validator>
<field-validator type="regex">
<param name="regexExpression"><![CDATA[^1[358]\d{9}$]]></param>
<message>手机号格式不正确</message>
</field-validator>
</field>
</validators>
package cn.itcast.a_action;
import java.util.regex.Pattern;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class PersonAction extends ActionSupport {
private String username;
private String mobile;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String update() {
ActionContext.getContext().put("message", "更新成功");
return "message";
}
public String save() {
ActionContext.getContext().put("message", "保存成功");
return "message";
}
}
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>输入校验</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
<body>
<s:fielderror />
<form action="<%=request.getContextPath()%>/person/list_update.action"
method="post">
用户名:<input type="text" name="username">不能为空<br /> 手机号:<input
type="text" name="mobile" />不能为空,并且要符合手机号的格式1,3/5/8,后面是9个数字<br /> <input
type="submit" value=" 提 交 " />
</form>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>结果</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
<body>
${message }
</body>
</html>