一、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