3.2 Struts2基本應用及工做流程

 html

struts2流程
java

*.action-->web.xml(過濾器)-->struts.xml-->Action.java-->JSP等web

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個文件:express

  • apps:包含基於Struts 2的示例應用,是學習Struts 2很是有用的資料。  apache

  • 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//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校驗器、字段表達式校驗器等。


附:目錄《JavaEE基礎實用教程》筆記說明

相關文章
相關標籤/搜索