一、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为固定写法。
示例:
程序包如下:
主程序的入口: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";
}
}
效果:
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