Struts2_基于XML配置方式对指定action方法实现输入校验、基于XML校验的一些特点

47 篇文章 0 订阅

基于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>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值