html
struts2流程
java
*.action-->web.xml(過濾器)-->struts.xml-->Action.java-->JSP等web
命名爲「Struts2」正則表達式
用MyEclipse添加Struts2支持,項目右鍵->MyEclipse->Project Facets[Capabilities]->Install Apache Struts(2.x) Facet,而後在彈出窗口中點擊Finish便可。(我這是mac版的Myeclipse 2014,若是是Win版的Myeclipse8.5,是右鍵項目->MyEclipse->Add Struts Capabilities...,而後在彈出窗口中選擇Struts版本爲2.1,點擊Finish便可)。若是更早版本的MyEclipse 沒有對Struts 2的支持,也能夠去官網下載Struts2(http://archive.apache.org/dist/struts/)。我這裏用的版本是2.2.1。數據庫
將下載的Zip文件解壓縮,是一個典型的Web結構。包含如下4個文件:express
apps:包含基於Struts 2的示例應用,是學習Struts 2很是有用的資料。 apache
docs:包含Struts 2的相關文檔,如Struts 2快速入門、Struts 2文檔、API文檔等內容。 編程
lib:包含Struts 2框架的核心類庫,以及Struts 2的第三方插件類庫。 瀏覽器
src:包含Struts 2框架的所有源代碼。服務器
右擊項目名,選擇【Build Path】→【Configure Build Path】菜單項,出現對話框。選擇【Libraries】,單擊【Add External JARs】按鈕,進入下載的Struts 2目錄的lib文件夾,選中以下所列出的8個Jar包,單擊【OK】按鈕完成類庫的添加。固然最簡單的是所有導入。
所需的jar包
commons-fileupload-1.2.1.jar
commons-io-1.3.2.jsr
commons-logging-1.0.4.jar
freemarker-2.3.16.jar
javassist-3.7.ga.jar
ognl-3.0.jar
struts2-core-2.2.1.jar
xwork-core-2.2.1.jar
備註:若是是Myeclipse2014,又是這種方式引入jar,那麼發佈項目的時候須要手動添加jar到項目下。項目右鍵->properties->Myeclipse->Deployment Assembly->Add...。
打開項目中的WebRoot/WEB-INF/web.xml文件,修改其代碼以下:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name>Struts2</display-name> <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>*.action</url-pattern> </filter-mapping> </web-app>
該代碼主要配置一個過濾器,讓請求可以被Struts2框架來處理。
備註:Struts 2.0.11版的時候,過濾器是FilterDispatcher,配置文件以下,
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/JavaEE/web-app_2_5.xsd"> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>struts 2應用</title> </head> <body> <form action="struts2.action" method="post"> 請輸入姓名: <input type="text" name="name" /> <br> <input type="submit" value="提交" /> </form> </body> </html>
單擊「提交」按鈕就會交給struts2.action處理,struts2的攔截器就會起做用,將用戶請求轉發給對應的Action類。
創建class,命名爲「StrutsAction」,代碼以下:
package org.action; import java.util.Map; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class StrutsAction extends ActionSupport{ private String name; public String getName() { return name; } public void setName(String name) { this.name=name; } public String execute() throws Exception { if(!name.equals("HelloWorld")){ Map request=(Map)ActionContext.getContext().get("request"); request.put("name",getName()); return "success"; }else{ return "error"; } } }
任何一個Struts 2程序都不能缺乏struts.xml文件,它是Struts 2運行的核心。右擊src文件夾,選擇【new】→【file】菜單項,在File name框中輸入「struts.xml」,修改後的代碼以下:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <package name="default" extends="struts-default"> <action name="struts2" class="org.action.StrutsAction"> <result name="success">/welcome.jsp</result> <result name="error">/hello.jsp</result> </action> </package> </struts>
備註:action的name不要用struts,會報錯。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <%@ taglib uri="/struts-tags" prefix="s" %> <html> <head> <title>struts 2應用</title> </head> <body> Hello,<s:property value="#request.name"/>! </body> </html>
9.部署和運行
啓動Tomcat後,在瀏覽器中輸入「http://localhost:8080/Struts2/hello.jsp」,會看到如圖3.3所示的界面。當在輸入框中輸入「張三」時,會出現如圖3.4所示界面。若是輸入「HelloWorld」,就會返回當前頁面。
圖3.3 運行界面
圖3.4 運行成功界面
在測試過程當中,若是修改了.java文件或配置文件,必須重啓Tomcat服務,而修改了JSP文件只需刷新頁面。
由上例可看出,當用戶發送一個請求後,也就是一個*.action,web.xml中配置的StrutsPrepareAndExecuteFilter(struts2的框架的核心控制器)就會過濾該請求。若是請求是以.action結尾,該請求就會被轉入struts2框架處理,根據*.action請求前面的「*」來決定調用哪一個業務。
Struts 2框架中的配置文件struts.xml會起映射做用,它會根據「*」來決定調用用戶定義的哪一個Action類。例如在項目Struts2中,請求爲struts.action,前面「*」的部分是「struts2」,因此在struts.xml中有個Action類的name爲「struts2」,這表示該請求與這個Action來匹配,就會調用該Action中class屬性指定的Action類。可是在Struts 2中,用戶定義的Action類並非業務控制器,而是Action代理,其並無和Servlet API耦合。因此Struts 2框架提供了一系列的攔截器,它負責將HttpServletRequest請求中的請求參數解析出來,傳入到用戶定義的Action類中。而後再調用其execute()方法來處理用戶請求,處理結束後,返回一個值,這時struts.xml文件又起映射做用,根據返回的值來肯定跳轉到哪一個頁面。
1)web.xml文件
Filter過濾器是Java項目開發中的一種經常使用技術。它是用戶請求和處理程序之間的一層處理程序。它能夠對用戶請求和處理程序響應的內容進行處理,一般用於權限控制、編碼轉換等場合。
Servlet過濾器是在Java Severlet規範中定義的,可以對過濾器關聯的URL請求和響應進行檢查和修改。
全部過濾器必須實現java.Serlvet.Filter接口,這個接口中含有3個過濾器類必須實現的方法:
a)init(FilterConfig):Servlet過濾器的初始化方法,Servlet容器建立Servlet過濾器實例後將調用這個方法。
b)doFilter(ServletRequest,ServletResponse,FilterChain):完成實際的過濾操做,當用戶請求與過濾器關聯的URL時,Servlet容器將先調用過濾器的doFilter方法,返回響應以前也會調用此方法。FilterChain參數用於訪問過濾器鏈上的下一個過濾器。
c)destroy():Servlet容器在銷燬過濾器實例前調用該方法,這個方法能夠釋放Servlet過濾器佔用的資源,過濾器類編寫完成後,必需要在web.xml中進行配置,格式以下:
<filter> <!--自定義的名稱--> <filter-name>過濾器名</filter-name> <!--自定義的過濾器類,注意,這裏要在包下,要加包名--> <filter-class>過濾器對應類</filter-class> <init-param> <!--類中參數名稱--> <param-name>參數名稱</param-name> <!--對應參數的值--> <param-value>參數值</param-value> </init-param> </filter>
過濾器的關聯方式有3種:
(1)與一個URL資源關聯:
<filter-mapping> <!- -這裏與上面配置的名稱要相同--> <filter-name>過濾器名</filter-name> <!- -與該URL資源關聯--> <url-pattern>xxx.jsp</url-pattern> </filter-mapping>
(2)與一個URL目錄下的全部資源關聯:
<filter-mapping> <filter-name>過濾器名</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
(3)與一個Servlet關聯:
<filter-mapping> <filter-name>過濾器名</filter-name> <url-pattern>Servlet名稱</url-pattern> </filter-mapping>
2)struts.xml文件
是Struts2框架的核心配置文件,主要用於配置action。
struts.xml文件一般放在Web應用程序的WEB-INF/classes目錄下,該目錄下的struts.xml將被Struts 2框架自動加載。
struts.xml文件是一個XML文件,文件前面是XML的頭文件,而後是<struts>標籤,位於Struts 2配置的最外層,其餘標籤都是包含在它裏面的。
3)package元素
Struts2的包相似於Java中的包,將action、result、result類型、攔截器和攔截器棧組織爲一個邏輯單元,從而簡化了維護工做,提升了重用性。
與Java中的包不一樣的是,Struts 2中的包能夠擴展另外的包,從而「繼承」原有包的全部定義,並能夠添加本身包的特有配置,以及修改原有包的部分配置。從這一點上看,Struts 2中的包更像Java中的類。package有如下幾個經常使用屬性:
name:該屬性是必選的,指定包的名字,這個名字將做爲引用該包的鍵。必須是惟一的。
extends:該屬性是可選的,容許一個包繼承一個或多個先前定義的包。
abstract:該屬性是可選的,將其設置爲true,能夠把一個包定義爲抽象的。抽象包不能有action定義、只能做爲「父」包,被其餘包所繼承。由於Struts2的配置文件是從上到下處理的,因此父包應該在子包前面定義。
namespace:該屬性是可選的,將保存的action配置爲不一樣的名稱空間。看下面這個例子:
<package name="default"> <action name="foo" class="mypackage.simpleAction"> <result name="success">/foo.jsp</result> </action> <action name="bar" class="mypackage.simpleAction"> <result name="success">/bar.jsp</result> </action> </package> <package name="mypackage1" namespace="/"> <action name="moo" class="mypackage.simpleAction"> <result name="success">/moo.jsp</result> </action> </package> <package name="mypackage2" namespace="/barspace"> <action name="bar" class="mypackage.simpleAction"> <result name="success">/bar.jsp</result> </action> </package>
若是請求/barspace/bar.action,框架將首先查找/barspace名稱空間,若是找到了,則執行bar.action;若是沒找到,到默認的空間中繼續查找。本例中,/barspace名稱空間中有名爲bar的Action,所以它會被執行。
若是請求/barspace/foo.action,框架將首先在/barspace名稱空間中查找foo這個Action。本例中/barspace名稱空間中沒有foo.action,所以默認的名稱空間中的/foo.action將被找到執行。
若是請求/moo.action,框架會在名稱空間「/」中查找moo.action,若是沒有找到,則到默認名稱空間中查找。
4)Action元素
Struts2的核心功能是Action。開發好一個Action類後,就要配置Action映射。 當一個請求匹配到某個Action名字時,框架就使用這個映射來肯定如何處理請求。
<action name="struts" class="org.action.StrutsAction"> <result name="success">/welcome.jsp</result> <result name="error">/hello.jsp</result> </action>
一個Action類中不是隻能有execute()方法,若是一個請求要調用Action類中的其餘方法,就須要在Action配置中加以配置。例如,若是在org.action.StrutsAction中有另一個方法爲:
public String find() throws Exception{return SUCCESS;}
那麼若是想要調用這個方法,就必須在Action中配置method屬性,其配置方法爲:
<! - - name值是用來和請求匹配的- - > <action name="find" class="org.action.StrutsAction" method="find"> <result name="success">/welcome.jsp</result> <result name="error">/hello.jsp</result> </action>
5)result元素
一個result表明一個可能的輸出。當Action類中的方法執行完成時,返回一個字符串類型的結果代碼,框架根據這個結果代碼選擇對應的result,向用戶輸出。
<result name ="邏輯視圖名" type ="視圖結果類型"/> <param name ="參數名">參數值</param> </result>
param中的name屬性有兩個值:
location:指定邏輯視圖。
parse:是否容許在實際視圖名中使用OGNL表達式,參數默認爲true。
實際上不用明確寫這個param標籤,直接在<result></result>中指定物理視圖位置。
result中的name屬性有以下值:
success:表示請求處理成功,該值也是默認值。
error:表示請求處理失敗。
none:表示請求處理完成後不跳轉到任何頁面。
input:表示輸入時若是驗證失敗應該跳轉到什麼地方(關於驗證後面會介紹)。
login:表示登陸失敗後跳轉的目標。
type(非默認類型)屬性支持的結果類型有如下幾種:
chain:用來處理Action鏈。
chart:用來整合JFreeChart的結果類型。
dispatcher:用來轉向頁面,一般處理JSP,該類型也爲默認類型。
freemarker:處理FreeMarker模板。
httpheader:控制特殊HTTP行爲的結果類型。
jasper:用於JasperReports整合的結果類型。
jsf:JSF整合的結果類型。
redirect:重定向到一個URL。
redirect-action:重定向到一個Action。
stream:向瀏覽器發送InputStream對象,一般用來處理文件下載,還可用於返回AJAX數據。
tiles:與Tiles整合的結果類型。
velocity:處理Velocity模板。
xslt:處理XML/XLST模板。
plaintext:顯示原始文件內容,如文件源代碼。
dispatcher類型是默認類型,一般不寫。redirect-action類型用於當一個Action處理結束後,直接將請求重定向到另外一個Action。以下列配置:
… <action name="struts" class="org.action.StrutsAction" > <result name="success">/welcome.jsp</result> <result name="error">/hello.jsp</result> </action> <action name="login" class="org.action.StrutsAction"> <result name="success" type="redirect-action">struts</result> </action> …
第一個action中省略了type,就意味着是默認類型,即爲dispatcher,因此後面跳轉到一個jsp文件。
6)ActionSupport類
在Struts2中,Action與容器已經作到徹底解耦,再也不繼承某個類或某個接口,因此前面的例子中,StrutsAction能夠不用繼承ActionSupport類。但特殊狀況下,爲了下降編程的工做難度,充分利用Struts2提供的功能,定義Action時,會繼承ActionSupport類。 該類位於xwork2提供的包com.opensymphony.xwork2中。
ActionSupport類爲Action提供了一些默認實現,主要包括預約義常量、從資源文件中讀取文本資源、接收驗證錯誤信息和驗證的默認實現。
下面是ActionSupport類所實現的接口:
public class ActionSupport implements Action, Validateable, ValidationAware, TextProvider, LocaleProvider,Serializable {}
Action接口一樣位於com.opensymphony.xwork2包,定義了一些常量和一個execute()方法。
public interface Action { public static final String SUCCESS="success"; public static final String NONE="none"; public static final String ERROR="error"; public static final String INPUT="input"; public static final String LOGIN="login"; public String execute() throws Exception; }
因爲3.2.1節的例子中繼承了ActionSupport類,因此能夠看出,在execute的返回值中,其代碼能夠改成:
… public String execute() throws Exception { if(!name.equals("HelloWorld")){ Map request=(Map)ActionContext.getContext().get("request"); request.put("name",getName()); return SUCCESS; }else{ return ERROR; } } …
在前面的例子中,即便輸入空的name,服務器也會處理用戶請求,固然對這個例子沒有影響。但若是是註冊時,用戶註冊了空的用戶和密碼,而且保存到數據庫中,若是後面要根據用戶輸入的用戶名或密碼來查詢數據,這些空數據就可能會引發異常。
由於繼承了ActionSupport類,而該類實現了Validateable接口,該接口定義了一個validate()方法,因此只要在自定義的Action類中重寫該方法就能夠實現驗證功能。 下面來看其實現,能夠把3.2.1節的例子中的Action類改寫成:
package org.action; import java.util.Map; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class StrutsAction extends ActionSupport{ private String name; public String getName() { return name; } public void setName(String name) { this.name=name; } public String execute() throws Exception { if(!name.equals("HelloWorld"){ Map request=(Map)ActionContext.getContext().get("request"); request.put("name",getName()); return SUCCESS; }else{ return ERROR; } } public void validate() { //若是姓名爲空,則把錯誤信息添加到Action類的fieldErrors if(this.getName()==null||this.getName().trim().equals("")){ addFieldError("name","姓名是必須的!"); //把錯誤信息保存起來 } } }
定義了校驗方法後,該方法會在執行系統的execute()方法以前執行。若是執行該方法以後,Action類的fieldErrors中已經包含了數據校驗錯誤信息,將把請求轉發到input邏輯視圖處,因此要在Action配置中加入如下代碼:
… <action name="struts" class="org.action.StrutsAction" > <result name="success">/welcome.jsp</result> <result name="error">/hello.jsp</result> <result name="input">/hello.jsp</result> </action> …
把信息打印到出現錯誤後而轉發的頁面,<s:form.../>提供了輸出校驗錯誤的能力。把JSP頁面改寫一下(標籤的具體應用會在3.3節具體講解):
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <%@ taglib uri="/struts-tags" prefix="s"%><!-- 導入標籤開發能力 --> <html> <head> <title>struts 2應用</title> </head> <body> <s:form action="struts2.action" method="post"> <s:textfield name="name" label="請輸入姓名"></s:textfield> <s:submit value="提交"></s:submit> </s:form> </body> </html>
修改以後,部署運行。不輸入任何姓名直接提交,將會看到如圖3.5所示的界面。
備註:
可能會報錯
The Struts dispatcher cannot be found. This is usually caused by using Struts tags without the associated filter
是由於,之前在web.xml中配置的過濾條件是「/*」,而如今是「*.action」,因此對於jsp文件就沒法過濾。
方法一,修改過濾條件爲「/*」。
方法二(我的推薦這種),增長過濾器配置配置,以下
<filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping>
Struts 2提供了校驗框架,只須要增長一個校驗配置文件,就能夠完成對數據的校驗。Struts 2提供了大量的數據校驗器,包括表單域校驗器和非表單域校驗器兩種。
1)必填字符串校驗器(requiredstring校驗器)
輸入框必須是輸入的,而且字符串長度大於0。其校驗規則定義文件以下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> <validators> <!-- 須要校驗的字段的字段名 --> <field name="name"> <!--驗證字符串不能爲空,即必填--> <field-validator type="requiredstring"> <!--去空格--> <param name="trim">true</param> <!--錯誤提示信息--> <message>姓名是必需的!</message> </field-validator> </field> </validators>
問題:
引用的文件包含錯誤(http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd)。有關更多信息,右鍵單擊消息並選擇「顯示詳細信息...」
緣由:
原來最初struts2的驗證框架dtd使用的地址是「www.opensymphony.com/xwork」如今已經轉移到「http://struts.apache.org/dtds」下了
解決方法:
因此修改xml的dtd地址便可:
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
另附:
validators.xml文件稍有不一樣,dtd是1.0:
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator Config 1.0//EN" "http://struts.apache.org/dtds/xwork-validator-config-1.0.dtd">
該文件的命名規則:
ActionName-validation.xml:ActionName就是須要校驗的Action類的類名。所以這裏名爲StrutsAction-validation.xml,且該文件應該與Action類的文件位於同一路徑下。若是Action類中有2個甚至多個方法,對應的在struts.xml文件中就有多個Action的配置與之匹配,這是若是相對其中的一個方法進行驗證,命名應該爲:ActionName-name-validation.xml。這裏的name是在struts.xml中Action屬性裏面的name。有了校驗規則文件後,在Action類中的validate方法就不須要了。
2)必填校驗器
該校驗器的名字是required,也就是<field-validator>屬性中的type="required",該校驗器要求指定的字段必須有值,與必填字符串校驗器最大的區別就是能夠有空字符串。若是把上例改成必填校驗器,其代碼應爲:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd"> <validators> <!-- 須要校驗的字段的字段名 --> <field name="name"> <!-- 驗證字符串必填 --> <field-validator type="required"> <!-- 錯誤提示信息 --> <message>姓名是必需的!</message> </field-validator> </field> </validators>
3)整數校驗器
該校驗器的名字是int,該校驗器要求字段的整數值必須在指定範圍內,故其有min和max參數。若是有個age輸入框,要求其必須是整數,且輸入值必須在18與100之間,該校驗器的配置應該爲:
<validators> <!-- 須要校驗的字段的字段名 --> <field name="age"> <field-validator type="int"> <!-- 年齡最小值 --> <param name="min">18</param> <!-- 年齡最大值 --> <param name="max">100</param> <!-- 錯誤提示信息 --> <message>年齡必須在18至100之間</message> </field-validator> </field> </validators>
4)日期校驗器
該校驗器的名字是date,該校驗器要求字段的日期值必須在指定範圍內,故其有min和max參數。其配置格式以下:
<validators> <!-- 須要校驗的字段的字段名 --> <field name="date"> <field-validator type="date"> <!-- 日期最小值 --> <param name="min">1980-01-01</param> <!-- 日期最大值 --> <param name="max">2009-12-31</param> <!-- 錯誤提示信息 --> <message>日期必須在1980-01-01至2009-12-31之間</message> </field-validator> </field> </validators>
5)郵件地址校驗器
該校驗器的名稱是email,該校驗器要求字段的字符若是非空,就必須是合法的郵件地址。以下面的代碼:
<validators> <!-- 須要校驗的字段的字段名 --> <field name="email"> <field-validator type="email"> <message>必須輸入有效的電子郵件地址 </message> </field-validator> </field> </validators>
6)網址校驗器
該校驗器的名稱是url,該校驗器要求字段的字符若是非空,就必須是合法的URL地址。以下面的代碼:
<validators> <!-- 須要校驗的字段的字段名 --> <field name="url"> <field-validator type="url"> <message>必須輸入有效的網址 </message> </field-validator> </field> </validators>
7)字符串長度校驗器
該校驗器的名稱是stringlength,該校驗器要求字段的長度必須在指定的範圍內,通常用於密碼輸入框。以下面的代碼
<validators> <!-- 須要校驗的字段的字段名 --> <field name="password"> <field-validator type="stringlength"> <!-- 長度最小值 --> <param name="minLength">6</param> <!-- 長度最大值 --> <param name="maxLength">20</param> <!-- 錯誤提示信息 --> <message>密碼長度必須在6到20之間</message> </field-validator> </field> </validators>
8)正則表達式校驗器
該校驗器的名稱是regex,它檢查被校驗字段是否匹配一個正則表達式。以下面的代碼:
<validators> <field name="xh"> <field-validator type="regex"> <param name="expression"><![CDATA[(\d{6})]]></param> <message>學號必須是6位的數字</message> </field-validator> </field> </validators>
還有其餘校驗器:如表達式校驗器、Vistor校驗器、字段表達式校驗器等。