ActionSupport类实现了Validateable、ValidationAware接口,
其中Validateable接口就是验证器接口,该接口有一个validate()方法,
validate()方法专门用来验证数据,实现的时候需要继承ActionSupport类,
所以编写一个Action类时重写validate()方法就可以实现自定义输入验证功能。
实例---流程还是老一套
1、在web.xml中配置核心控制器FilterDispatcher
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <filter> <!-- 配置Struts2核心Filter的名字 --> <filter-name>struts2</filter-name> <!-- 配置Struts2核心Filter的实现类 --> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <!-- 配置Filter拦截的URL --> <filter-mapping> <!-- 配置Struts2的核心FilterDispatcher拦截所有用户请求 --> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
2、编写视图组件(register1.jsp)
<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>用户注册页面</title> </head> <body> <center> 请输入信息…… <hr> <s:form action="register1" method="post"> <table border="1"> <tr> <td> <s:textfield name="userName" label="姓名" size="16" /> </td> </tr> <tr> <td> <s:password name="userPassword" label="密码" size="18" /> </td> </tr> <tr> <td> <s:textfield name="userAge" label="年龄" size="16" /> </td> </tr> <tr> <td> <s:textfield name="userTelephone" label="电话" size="16" /> </td> </tr> <tr> <td> <s:submit value="提交" /> </td> </tr> </table> </s:form> </center> </body> </html>
3、编写业务控制器Action类(RegistAction1.java)
这里重写了validate()方法
package validatorAction; import com.opensymphony.xwork2.ActionSupport; public class RegistAction1 extends ActionSupport{ private String userName; private String userPassword; private int userAge; private String userTelephone; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserPassword() { return userPassword; } public void setUserPassword(String userPassword) { this.userPassword = userPassword; } public int getUserAge() { return userAge; } public void setUserAge(int userAge) { this.userAge = userAge; } public String getUserTelephone() { return userTelephone; } public void setUserTelephone(String userTelephone) { this.userTelephone = userTelephone; } //重写validate()方法 public void validate(){ if(userName==null||userName.length()<6||userName.length()>16){ addFieldError("userName","用户姓名的长度不符合要求,6~16位!"); } if(userPassword.length()<6||userPassword.length()>16){ addFieldError("userPassword","密码的长度不符合要求,6~16位!"); } if(userAge>130||userAge<1){ addFieldError("userAge","年龄不符合要求,1~130岁"); } if(userTelephone.length()!=8){ addFieldError("userTelephone","电话号码不符合要求,8位"); } } public String execute(){ return "success"; } }
4、struts.xml配置对应的action(name="register1")
<?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="intercept" extends="struts-default"> <interceptors> <interceptor name="replace" class="interceptor.MyInterceptor" ></interceptor> </interceptors> <action name="public" class="interceptor.PublicAction"> <result name="success">/success.jsp</result> <result name="login">/success.jsp</result> <interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="replace"></interceptor-ref> </action> <action name="register1" class="validatorAction.RegistAction1"> <result name="input">/validate/register1.jsp</result> <result name="success">/validate/success1.jsp</result> </action> <action name="register2" class="validatorAction.Register2Action"> <result name="input">/validate/register2.jsp</result> <result name="success">/validate/success2.jsp</result> </action> </package> </struts>