Struts2基本應用及工作流程
來自: http://my.oschina.net/jerrypan/blog/618063
??
struts2流程
*.action-->web.xml(過濾器)-->struts.xml-->Action.java-->JSP等
3.2.1 簡單Struts 2實例開發
1.建立一個Web項目
命名為“Struts2”
2.添加Struts 2框架支持
用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個文件:
-
apps:包含基于Struts 2的示例應用,是學習Struts 2非常有用的資料。
-
docs:包含Struts 2的相關文檔,如Struts 2快速入門、Struts 2文檔、API文檔等內容。
-
lib:包含Struts 2框架的核心類庫,以及Struts 2的第三方插件類庫。
-
src:包含Struts 2框架的全部源代碼。
3.加載Struts 2基本類庫(如果是自己下載的Struts,那么需要這一步)
右擊項目名,選擇【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...。
4.修改web.xml文件
打開項目中的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>
5.創建hello.jsp
<%@ 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類。
6.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"; } } }
7.創建并配置struts.xml文件
任何一個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,會報錯。
8.創建welcome.jsp
<%@ 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文件只需刷新頁面。
3.2.2 Struts 2工作流程及各種文件詳解
1.struts2的工作流程
由上例可看出,當用戶發送一個請求后,也就是一個*.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文件又起映射作用,根據返回的值來確定跳轉到哪個頁面。
2.struts2中各種文件詳解
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; } } …
3.2.3 Struts 2數據驗證及驗證框架的應用
在前面的例子中,即使輸入空的name,服務器也會處理用戶請求,當然對這個例子沒有影響。但如果是注冊時,用戶注冊了空的用戶和密碼,并且保存到數據庫中,如果后面要根據用戶輸入的用戶名或密碼來查詢數據,這些空數據就可能會引起異常。
1.數據校驗
因為繼承了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>
2.Struts2驗證框架的應用
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.2//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校驗器、字段表達式校驗器等。