validation.xml 的命名規則和放置路徑:
檔案名稱:<ActionClassName>-validation.xml
<ActionClassName>就是要驗證的Action類的名字。要將此檔案放於Class檔案相同的目錄。
如果在Action類在struts配置中有多個action執行個體(action name),那麼對應某個action的驗證檔案名稱規則如下:
檔案名稱:<ActionClassName>-<aliasName>-validation.xml
例如:UserAction-login-validation.xml
(注意:上面的<aliasName>並不是method name,而是struts.xml中配置的action的name)
validation.xml 的內容樣本:
<?xml version="1.0" encoding="UTF-8"?><br /><!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"<br />"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"><br /><validators><br /><field name="username"><br /><field-validator type="requiredstring"><br /><param name="trim">true</param><br /><message>請填寫使用者名稱</message><br /></field-validator><br /><field-validator type="stringlength"><br /><param name="minLength">4</param><br /><param name="maxLength">32</param><br /><message>使用者名稱長度應在4到32個字元間</message><br /></field-validator><br /></field><br /><field name="password"><br /><field-validator type="requiredstring"><br /><message>請填寫密碼</message><br /></field-validator><br /><field-validator type="stringlength"><br /><param name="minLength">6</param><br /><param name="maxLength">32</param><br /><message>為了您帳號的安全,請設定6個字母以上的密碼(最長可設定32個字母)</message><br /></field-validator><br /></field><br /></validators><br />其實message的資訊還有可以配置國際化:配置方法也極其簡單就是<message key="userpass.required"></message>,key對應的是國際化設定檔中的國際化資訊。Struts2 的驗證規則大概有以下數種:
required:必填校正器
requiredstring:必填字串校正器
int:整數校正器
double:雙精確度浮點數校正器
date:日期校正器
expression:運算式校正器
fieldexpression:欄位運算式校正器
email:電子郵件校正器
url:網址校正器
visitor:Visitor校正器
conversion:轉換校正器
stringlength:字串長度校正器
regex:Regex校正器
常用的驗證規則:
1。必填檢驗
<validators><field name="username">
<field-validator type="required">
<message>指定檢驗失敗的提示資訊</message>
</field-validator>
</field>
</validators>
2。必填字串檢驗
<validators>
<field name="username">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>指定檢驗失敗的提示資訊</message>
</field-validator>
</field>
</validators>
3。整數檢驗器/浮點檢驗
<validators>
<field name="age">
<field-validator type="int">
<param name="min">1</param>
<param name="max">150</param>
<message>年紀必須在1到150之間</message>
</field-validator>
</field>
</validators>
4。日期檢驗
<validators>
<field name="birth">
<field-validator type="date">
<param name="min">1900-01-01</param>
<param name="max">2050-02-21</param>
<message key="birth.range"/>
</field-validator>
</field>
</validators>
5.欄位運算式檢驗器(要求指定欄位滿足一個邏輯運算式)
<validators>
<field name="re_pass"><field-validator type="fieldexpression"><!--指定邏輯運算式 -->
<param name="expression"> (pass eq re_pass)</param>
<message>密碼必須和確認密碼相等</message>
</field-validator>
</field>
</validators>
6.郵件地址校正
<validators>
<field name="email">
<field-validator type="email">
<message>你的電子郵件地址必須是一個有效電郵地址</message>
</field-validator>
</field>
</validators>
7。網址
檢驗
<validators>
<field name="url">
<field-validator type="url">
<message>你的首頁地址必須是一個有效網址</message>
</field-validator>
</field>
</validators>
8.字串長度檢驗
<validators>
<field name="user"> <field-validator type="stringlength">
<param name="minlength">4</param>
<param name="maxlength">20</param>
<message>你的使用者名稱長度必須在4到20之間</message>
</field-validator>
</field>
</validators>
9.Regex檢驗
<validators>
<field name="user">
<field-validator type="regex">
<param name="expression_r"><![CDATA[(\w{4,25})]]></param>
<message>您輸入的使用者名稱只能是字母和數組,且長度必須在4到25之間</message>
</field-validator>
</field>
</validators>接下來我舉一個簡單的登入驗證的例子:
login.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><br /><%@ taglib uri="/struts-tags" prefix="s"%><br /><%<br />String path = request.getContextPath();<br />String basePath = request.getScheme() + "://"<br />+ request.getServerName() + ":" + request.getServerPort()<br />+ path + "/";<br />%><br /><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><br /><html><br /><head><br /><base href="<%=basePath%>"><br /><title>My JSP 'fail.jsp' starting page</title><br /><meta http-equiv="pragma" content="no-cache"><br /><meta http-equiv="cache-control" content="no-cache"><br /><meta http-equiv="expires" content="0"><br /><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><br /><meta http-equiv="description" content="This is my page"><br /></head><br /><body><br /><s:form action="user/login.action" validate="true"><br /><table<br />style="border-style: solid; border-color: lightblue; position: absolute; top: 30px"><br /><tbody><br /><tr><br /><td><br /><div<br />style="margin-center: 32px; border-style: solid; border-color: lightblue; border-width: 2px;"><br /><a>使用者名稱:</a><br /><input id="username" name="user.name" type="text" /><br /></div><br /></td><br /></tr><br /><tr><br /><td><br /><div<br />style="margin-center: 32px; border-style: solid; border-color: lightblue; border-width: 2px"><br /><a>密 碼:</a><br /><input id="password" name="user.password" type="password" /><br /></div><br /></td><br /></tr><br /><!-- 彈出出錯資訊 --><br /><tr><br /><td><br /><div id="msg"><s:fielderror/></div><br /></td><br /></tr><br /><tr><br /><td><br /><div><br /><span><input id="submit" type="submit" value="登入" /><br /></span><br /></div><br /></td><br /></tr><br /></tbody><br /></table><br /></s:form><br /></body><br /></html>這裡有個地方需要注意:form中要加入validate=“true”這個屬性。***Action-validation.xml<?xml version="1.0" encoding="UTF-8" ?><br /><!DOCTYPE validators PUBLIC<br /> "-//OpenSymphony Group//XWork Validator 1.0//EN"<br /> "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd" ><br /><validators ><br /> <field name ="user.name" ><br /> <field-validator type ="requiredstring"><br /> <message key="username.required"></message><br /> </field-validator><br /> </field><br /> <field name ="user.password" ><br /> <field-validator type ="requiredstring"><br /> <message key="userpass.required"></message><br /> </field-validator><br /> </field><br /></validators> 這種方式就使用了國際化的資訊。***Action.action這個挺簡單的就是常規的action寫法,在execute中驗證表單,或自己封裝方法驗證表單,但是不能繼承validate()方法,因為action執行的時候實現檢察validate方法的,如果這樣的話就配置重複了,不過有什麼結果我沒有測試(沒啥意義)。struts.xml配置<constant name="struts.custom.i18n.resources" value="globalMessages"></constant><br /><include file="defaule.xml" /><br /><!-- 有關使用者的操作 --><br /><package name="user" extends="struts-default" namespace="/user"><br /><action name="login" class="bbs.action.UserAction"><br /><result name="success">/system/list.action</result><br /><result name="input">/login.jsp</result><br /></action><br /></package>有一點有必要提一下,action中必須配置input這個result,因為如果驗證失敗後struts2會自動轉向到input的result,不管你的action中配置的驗證失敗的result是什麼。所以這個input屬性的result不能落下。效果Firefox下面的中文語言:ie下的英文語言: