structs校验框架


  • Struts2提供了功能强大的输入校验机制,通过Struts2内建的输入校验器,在应用程序中无需书写任何代码,即可完成大部分的校验功能,并可以同时完成客户端和服务器端的校验。
  • 如果应用的输入校验规则特别,Struts2也允许通过重写validate方法来完成自定义校验,另外Struts2的开放性还允许开发者提供自定义的校验器
  • Struts2中可以通过重写validate方法来完成输入校验。如果我们重写了validate方法,则该方法会应用于此Action中的所有提供服务的业务方法。

Struts2的输入校验流程如下:

1.配置WEB-INF文件:

<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

2.编写一个Action类,该Action类接收页面提交过来的参数(LoginValidateAction)

package com.action;
import com.opensymphony.xwork2.ActionSupport;
public class LoginValidateAction extends ActionSupport{
/**
*
*/
private static final long serialVersionUID = 1L;
// Action类公用私有变量,用来做页面导航标志
private static String FORWARD = null;
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public void validate() {

}

public String execute(){
try {
// 判断输入值是否是空对象或没有输入
if (username.equals("admin")&& password.equals("1234")) {
// 根据标志内容导航到操作成功页面
FORWARD = "success";
} else {
// 根据标志内容导航到操作失败页面
FORWARD = "input";
}
} catch (Exception ex) {
ex.printStackTrace();
}
return FORWARD;
}
}

3.在该Action相同的目录下建一个xml文件,该文件的命名为ActionName-validation.xml,其中 ActionName为该Action的类名,例如LoginValidateAction-validation.xml。然后在xml配置文件中配置需要验证的字段。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.3//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<validators>
<field name="username">
<field-validator type="requiredstring">
<message key="用户名不能为空"/>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<message key="密码不能为空"/>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">6</param>
<param name="maxLength">16</param>
<message>密码长度应在6~16个字符之间</message>
</field-validator>
</field>
</validators>

4.配置struts.xml文件

<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>

<!-- Action所在包定义 -->
<package name="chapter10web" extends="struts-default">
<!-- 通过Action类处理才导航的的Action定义 -->
<action name="Login" class="com.action.LoginAction">
<result name="input">/login.jsp</result>
<result name="success">/success.jsp</result>
</action>
<action name="validate" class="com.action.LoginValidateAction">
<result name="input">/loginvalidate.jsp</result>
<result>/index.jsp</result>
</package>
</struts>

5.添加一个jsp页面 loginvalidate.jsp,放入一个struts标签

<%@ page language="java" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- struts2标签库调用声明 -->
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>登录页面</title>
</head>
<body>
<!-- form标签库定义,以及调用哪个Action声明 -->
<s:form action="validate">
<table width="60%" height="76" border="0">
<!-- 各标签定义 -->
<s:textfield name="username" label="用户名"/>
<s:password name="password" label="密 码" />
<s:submit value="登录" align="center"/>
</table>
</s:form>
</body>
</html>

下面是struts2输入校验的规则:

 

 1.对必填校验

<field name="requiredValidatorField">
<field-validator type="required">
<message>必填内容</message>
</field-validator>
</field>

 2.必填字符串校验

<field name="requiredStringValidatorField">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>字符串必填校验</message>
</field-validator>
</field>

3.对int类型的校验

<field name="integerValidatorField">
<field-validator type="int">
<param name="min">1</param>
<param name="max">10</param>
<message key="validate.integerValidatorField" />
</field-validator>
</field>

4.对日期的校验

<field name="dateValidatorField">
<field-validator type="date">
<param name="min">01/01/1990</param>
<param name="max">01/01/2000</param>
<message key="validate.dateValidatorField" />
</field-validator>
</field>

5.对email的校验

<field name="emailValidatorField">
<field-validator type="email">
<message key="validate.emailValidatorField" />
</field-validator>
</field>

6.对URL的校验

<field name="urlValidatorField">
<field-validator type="url">
<message key="validate.urlValidatorField" />
</field-validator>
</field>

7.对字符串长度的校验

<field name="stringLengthValidatorField">
<field-validator type="stringlength">
<param name="maxLength">4</param>
<param name="minLength">2</param>
<param name="trim">true</param>
<message key="validate.stringLengthValidatorField" />
</field-validator>
</field>

8.对正则表达式的校验

<field name="regexValidatorField">
<field-validator type="regex">
<param name="expression">.*\.txt</param>
<message key="validate.regexValidatorField" />
</field-validator>
</field>

最后提一句:

Struts2中应用客户端输入校验

这里要用Struts2的标签,form的validate属性要设置为true,并且不要将theme属性指定为simple。

(simple表示Struts2将把这个解析成普通的HTML标签)