struts2基于xml配置方式对Action方法进行校验

一、struts2校验流程

1、类型转化器对请求参数执行类型转换,把转换后的值赋给action中的属性;

2、如果在执行类型转换器的过程中出现异常,系统会将异常信息保存到ActionContex中,conversionError拦截器将异常信息封装到fieldErrors中,不管类型转换器是否出现异常,都会先调用Action的validateXxx()方法,Xxx为方法名,再调用action中的validate()方法

3、如果系统中的fieldErrors存在的错误信息,系统自动将请求转发到名称为input的视图,如果系统中的fieldErrors没有任何错误信息,系统将执行action中的处理方法。

二、struts2校验

 使用xml对Action方法进行校验方式主要有两种,一种是对Action的所有方法进行校验,另一种对Action指定方法进行校验。

1、对Action的所有方法进行校验

步骤:

1)创建Action类继承ActionSupport;

2)提供校验xml文件,该文件必须和action存放在同一包下;校验文件的取名格式为:PersonAction-validation.xml,其中PersonAction为action的简单类名,-validation为固定写法。

示例:

程序包如下:

struts2基于xml配置方式对Action方法进行校验_第1张图片

主程序的入口:index.jsp,主要对用户输入参数进行校验显示,这里我用empEntity类封装username,passwor属性,所以需要用emp.username取值

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!-- 引入strut2标签,显示校验信息-->
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>用户登陆</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
</head>
<body>
    <!-- 引入strut2标签,将校验信息显示到页面 -->
	<s:fielderror fieldName="emp.username"></s:fielderror>
	<s:fielderror fieldName="emp.password"></s:fielderror>
	<form action="${pageContext.request.contextPath}/login_all.action" method="post">
		<table align="center">
			<tr>
				<td colspan="2">用户登陆</td>
			</tr>
			<tr>
				<td>账号:</td>
				<td><input type="text" name="emp.username" size="30px;"></td>
			</tr>
			<tr>
				<td>密码:</td>
				<td colspan="2"><input type="text" name="emp.password" size="30px;"></td>
			</tr>
			<tr>
				<td colspan="2"><input type="submit" value="提交"></td>
			</tr>
		</table>
	</form>
</body>
</html>

employeeAction.xml校验文件配置信息

<?xml version="1.0" encoding="UTF-8"?>
 <!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="emp.username">
		<!-- 指定校验器类型 -->
		<field-validator type="requiredstring">
			<param name="trim">true</param>
			<message>请输入用户名</message>
		</field-validator>
	</field>
	<field name="emp.password">
		<field-validator type="requiredstring">
		    <param name="min">6</param>
		    <param name="min">10</param>
		    <message>密码长度必须是6~10之间</message>
		</field-validator>
	</field>
</validators>
创建struts.xml

<struts>
	<!-- 配置struts2处理请求后缀 -->
	<constant name="struts.action.extension" value="do,action"></constant>
	<package name="employee" extends="struts-default">
		<action name="login" class="com.casv.action.employeeAction" method="all">
		     <!-- 输入如果错误,action会返回input给struts.xml,此时验证器里面配置提示信息就会显示出现 -->
			<result name="input">/index.jsp</result>
			<result name="allemp">/emp/allpage.jsp</result>
		</action>
	</package>
</struts>

employeeAction.java

public class employeeAction extends ActionSupport {
	
	empEntity emp;

	public empEntity getEmp() {
		return emp;
	}

	public void setEmp(empEntity emp) {
		this.emp = emp;
	}

	// 查询
	public String all() {
		System.out.println("查询员工信息...,");
		return "allemp";
	}

	// 添加
	public String add() {
		return "allemp";
	}

}
效果:

struts2基于xml配置方式对Action方法进行校验_第2张图片

2、对Action的指定方法进行校验
 对指定的Action方法进行校验必须指定要校验的方法,指定校验的方法需要修改校验文件的名称,比如我请求的Action是action_all.action,那边我的校验文件需要修改为employeeAction-login_all-validation.xml,就会对指定Action方法进行校验。

1、使用通配符配置struts.xml

<struts>
	<!-- 配置struts2处理请求后缀 -->
	<constant name="struts.action.extension" value="do,action"></constant>
	<package name="employee" extends="struts-default">
		<action name="login_*" class="com.casv.action.employeeAction" method="{1}">
			<!-- 为Action属性注入值 
			  <param name="username">/casvip</param> 
		     -->
			<result name="input">/index.jsp</result>
			<result name="allemp">/emp/allpage.jsp</result>
		</action>
	</package>
</struts>

2、修改校验文件的名称为employeeAction-login_all-validation.xml

struts2基于xml配置方式对Action方法进行校验_第3张图片




你可能感兴趣的:(xml,struts2)