一、校驗器的配置風格
1、字段校驗器:
<field name="被校驗的字段">
<field-validator type="校驗器名">
<!--此處需要為不同校驗器指定數量不等的校驗規則-->
<param name="參數名">參數值</param>
....................
<!--校驗失敗后的提示信息,其中key指定國際化信息的key-->
<message>校驗失敗后的提示信息</message>
<!--校驗失敗后的提示信息:建議用getText("I18Nkey"),否則可能出現Freemarker template Error-->
</field-vallidator>
<!-- 如果校驗字段滿足多個規則,下面可以配置多個校驗器-->
</field>
2、非字段校驗器(本實例所使用):
<validator type="校驗器名">
<param name="fieldName">需要被校驗的字段</param>
<!--此處需要為不同校驗器指定數量不等的校驗規則-->
<param name="參數名">參數值</param>
<message>校驗失敗后的提示信息</message>
</validator>
兩種配置只是風格上的不同,沒有本質區別。
二、實例
本注冊項目中使用了4個內置校驗器。項目只有一個注冊頁面(register2.jsp),對應的業務控制器(Register2Action.java)。如果輸入的數據經內置驗證器驗證成功,跳轉到success2.jsp。
實例步驟如下:
注意:
Register2Action.java和Register2Action-validation.xml在同一個包validatorAction內
register2.jsp和success1.jsp在WebContent下(我用的是Eclipse)同一個文件夾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、編寫視圖組件(JSP頁面)
(1)注冊頁面(register2.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="register2" 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:password name="ruserPassword" 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:textfield name="userEmail" label="郵箱" size="16" /> </td> </tr> <tr> <td> <s:submit value="提交" /> </td> </tr> </table> </s:form> </center> </body> </html>
(2)驗證成功頁面(success2.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> 校驗通過,用戶信息如下: <hr> 姓名:<s:property value="userName" /> <br> 密碼:<s:property value="userPassword" /> <br> 年齡:<s:property value="userAge" /> <br> 電話:<s:property value="userTelephone" /> <br> 郵箱:<s:property value="userEmail" /> </body> </html>
3、編寫業務控制器(Register2Action.java)
package validatorAction; import com.opensymphony.xwork2.ActionSupport; public class Register2Action extends ActionSupport{ private String userName; private String userPassword; private String ruserPassword; private int userTelephone; private int userAge; private String userEmail; 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 String getRuserPassword() { return ruserPassword; } public void setRuserPassword(String ruserPassword) { this.ruserPassword = ruserPassword; } public int getUserTelephone() { return userTelephone; } public void setUserTelephone(int userTelephone) { this.userTelephone = userTelephone; } public int getUserAge() { return userAge; } public void setUserAge(int userAge) { this.userAge = userAge; } public String getUserEmail() { return userEmail; } public void setUserEmail(String userEmail) { this.userEmail = userEmail; } public String execute(){ return "success"; } }
4、配置struts.xml
<?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"> <action name="register2" class="validatorAction.Register2Action"> <result name="input">/validate/register2.jsp</result> <result name="success">/validate/success2.jsp</result> </action> </package> </struts>
5、內置驗證器的驗證文件(Register2Action-validation.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>
<!-- 字符串長度校驗器 ,校驗userName屬性-->
<validator type="stringlength">
<param name="fieldName">userName</param>
<param name="maxLength">16</param>
<param name="minLength">6</param>
<message>姓名長度為${minLength}到${maxLength}個字符!</message>
</validator>
<!-- 字符串長度校驗器 ,校驗userPassword屬性-->
<validator type="stringlength">
<param name="fieldName">userPassword</param>
<param name="maxLength">16</param>
<param name="minLength">6</param>
<message>密碼長度為${minLength}到${maxLength}個字符!</message>
</validator>
<!-- 字段表達式校驗器-->
<validator type="fieldexpression">
<param name="fieldName">userPassword</param>
<param name="expression">
<!-- 驗證兩次輸入的密碼是否相同 -->
<![CDATA[userPassword==ruserPassword]]>
</param>
<message>兩次密碼不一致!</message>
</validator>
<!-- 整數校驗器-->
<validator type="int">
<param name="fieldName">userAge</param>
<param name="min">1</param>
<param name="max">130</param>
<message>年齡必須在${min}到${max}之間!</message>
</validator>
<!-- 整數校驗器 -->
<validator type="int">
<param name="fieldName">userTelephone</param>
<param name="min">22222222</param>
<param name="max">99999999</param>
<message>電話必須在${min}到${max}之間的八位號碼!</message>
</validator>
<!-- 郵件地址校驗器-->
<validator type="email">
<param name="fieldName">userEmail</param>
<message>請使用正確的郵件格式!</message>
</validator>
</validators>
如果驗證失敗:
注意文件命名規則(X-validation.xml)
檢查stringlength等屬性的大小寫,還有字段是否和前面匹配;
查看struts-2.3.28.1\src\xwork-core\src\main\resources\xwork-validator-1.0.3.dtd文件,拷貝前4行代碼,因版本而異。
等等……