Struts2基本應用及工作流程

sgdx0682 8年前發布 | 48K 次閱讀 Struts2 Web框架

來自: 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包

  1. commons-fileupload-1.2.1.jar

  2. commons-io-1.3.2.jsr

  3. commons-logging-1.0.4.jar

  4. freemarker-2.3.16.jar

  5. javassist-3.7.ga.jar

  6. ognl-3.0.jar

  7. struts2-core-2.2.1.jar

  8. 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中配置的StrutsPrepareAndExecuteFilterstruts2的框架的核心控制器)就會過濾該請求。如果請求是以.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.xmlActionName就是需要校驗的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校驗器、字段表達式校驗器等。

 本文由用戶 sgdx0682 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!