亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

Struts初級教程(5)-表單驗證

2024-09-05 00:17:22
字體:
來源:轉載
供稿:網友
     應該清楚在Struts框架中,使用ActionForm Bean來實現應用程序系統的非持久性數據存儲和維護功能,它采用了自動填充屬性和調用的機制。所以必須繼承ActionForm類,并且包涵用戶表單輸入的屬性,以及相應的get方法和set方法。另外,還可以根據需要重寫父類的reset()和validate()方法,實現屬性的重置和表單數據驗證功能。 
     ActionForm類用于在視圖層和控制層之間傳遞HTML表單數據??刂茖涌梢詮腁ctionForm Bean中讀取用戶輸入的表單數據,也可以把來自模型層的數據存放到ActionForm Bean中,然后把數據返回給視圖。即ActionForm Bean從HTML表單中獲取用戶輸入的數據并將傳遞給Action類,也可以把從業務層返回的數據用來填充ActionForm Bean,然后JSP頁面用它來為HTML表單提供各種輸出字段的數據。此外,ActionForm Bean還具有表單驗證功能,可以過濾不合法的數據。 
     ActionForm Bean有兩種存在范圍:request和session。如果ActionForm Bean存在于request范圍,它僅在當前的請求/響應生命周期中有效。如果ActionForm Bean存在于session范圍,同一個ActionForm Bean實例在整個HTTP會話中都有效。 

     Ø   validate()方法
     這個方法主要負責檢查數據的格式和語法,而不負責檢查數據是否符合業務邏輯。
     ActionForm基類中的validate()方法在默認情況下將返回null。如果創建了ActionForm的子類,那么應該在子類覆蓋validate()方法。
     Ø   reset()方法
    這個方法用于恢復ActionForm Bean 的屬性的默認值。例如:把字符串屬性設為null或某個初始值。
     1、 修改前面我們寫的LoginActionForm,如果你不清楚的話,請您先看前幾個實例,具體代碼如下:
     public ActionErrors validate(ActionMapping actionMapping, 
               HttpServletRequest httpServletRequest) { 
    ActionErrors errors = new ActionErrors(); 
    if (username == null|| username.equals("")) { 
        errors.add(ActionErrors.GLOBAL_MESSAGE,  
                    new ActionError("loginform.error.username")); 
    } 
    if (userpass == null||userpass.equals("")) { 
        errors.add(ActionErrors.GLOBAL_MESSAGE,  
                    new ActionError("loginform.error.password")); 
    } 
    return errors;
}

這個方法返回ActionErrors對象,如果返回的ActionErrors對象為null,或者不包含任何ActionMessage對象,就表示沒有錯誤,數據驗證通過。如果ActionErrors中包含ActionMessage對象,就表示發生了驗證錯誤,此時就回把請求轉發到你struts.xml里面<action>元素input屬性指定的web資源。
new ActionError("loginform.error.username");取得資源文件里面的鍵值,用于頁面的輸出。
     2、 打開applicationResource.properties,加入如下信息:
loginform.error.username=please enter your username
loginform.error.password=please enter your password
因為我們前面做了國際化,所以打開applicationResource_zh_CN.properties文件,添加如下:
loginform.error.username=請輸入用戶名
loginform.error.password=請輸入密碼
     3、 修改struts-config.xml文件
<action  
    path="/login"  
    name="loginActionForm"  
    scope="request" 
    type="actions.LoginAction" 
    validate="true"  
    input="/login.jsp"> 
        <forward name="success" path="/success.jsp" /> 
        <forward name="error" path="/wrong.jsp" /> 
 </action>
在<action>元素中,name和scope屬性分別指定ActionForm的名字和它的范圍,valudate屬性指定是否執行表單驗證,而input屬性表示驗證失敗,所要顯示用戶的內容。
     4、 修改login.jsp,在<body>元素添加,目的是顯示錯誤信息,具體代碼片段如下:
<div> 
    <font color="red"> 
        <html:messages id="error"> 
            <li><bean:write name="error"/></li> 
         </html:messages> 
    </font>
</div>
<html:message/> :用于輸出消息。屬性介紹如下:
n         name:指定ActionMessages對象存放在request或session范圍內的屬性key。標簽處理類將根據這一屬性key來檢索request或session范圍的ActionMessages對象。
n         message屬性:指定消息的來源。如果為true,則從request或session范圍內檢索出屬性key為Globals.MESSAGE_KEY的ActionMessages對象,此時name屬性無效;如果為false,則根據name屬性來檢索ActionMessage對象,如果此時沒有設置name屬性,將采取默認值Globals.ERROR_KEY.message屬性的默認值為false。
n         id屬性:用來命名從消息中檢索出來的每個ActionMessage對象,它和<bean:write>標簽的name屬性匹配。
<bean:write/>:表示顯示javaBean或其屬性的內容。
5、 運行
打開IE,鍵入如下地址:http://localhost:8080/Struts1_Login/login.jsp
不輸入任何東西,我們直接點幾擊“確定”,如下:


二、Struts的Validator驗證框架
Validator 目前是Jakarta Commons 項目的一部分,它也被包含在Struts主分發里面,可以直接使用Struts 中自帶的Validator 庫,也可以去網站上下載http://jakarta.apache.org/commons/。 
       Struts框架能夠通過ActionForm Bean的validate()方法對用戶輸入的表單數據進行驗證。但是這種驗證方式又有一定的局限性。必須由具體的代碼來實現驗證邏輯,如果驗證邏輯發生了改變,就需要重新編寫程序代碼。此外,如果系統中有多個ActionForm Bean,并且他們包含一些相同的驗證邏輯時,那么開發人員必須對每個ActionForm Bean進行重復開發呢? 
       Validator框架能夠克服在ActionForm Bean中進行數據驗證的局限性,它允許為Struts應用靈活的配置驗證規則,無需編程。
Validator框架主要依賴于兩個JAR文件:
Ø         Jakarta-oro.jar
提供了一組處理文本的類,具有文本替換,過錄和分割等功能。
Ø         commons-validator.jar
提供了一個簡單、可擴展的驗證框架,包含了通用的驗證方法和驗證規則。 

主要的Struts驗證組件

組件

說明

驗證器

處理原生和其它通用類型?;掘炞C器包括required,mask(匹配正則表達式),minLength,maxLength,rangenativetypes, date,email,和creditCard。也可以定義定制 (或者插件) 驗證器。

資源文件

提供(本地化的)標注和消息。默認與Struts 共享消息資源。

XML 配置文件

根據需要定義針對字段的表單集和驗證。驗證器可以在一個單獨的文件中定義。

JSP 標簽

對給定的表單或Action 路徑產生JavaScript 驗證器。

ValidatorForm

根據FormBean 的名稱自動驗證屬性(在運行時通過ActionMapping 參數傳到validate 方法)。必須被擴展才能提供表單之上的期望屬性的驗證。

ValidatorActionForm

基于action 路徑自動驗證屬性(在運行時通過ActionMapping參數傳到validate 方法)。必須被擴展才能提供表單之上的期望屬性的驗證。


有些字段可能必須要求有數據輸入。而郵政編碼總是具有已知的長度。其它公共字段類型包括數值、日期、身份證號碼等等。
驗證器本身具有一些基本的驗證器來處理這些公共需要,當然還有其它一些需要。如果你的驗證不能被基本驗證器或者正則表達式滿足,你可以開發你自己的驗證器并插入到包中?;掘炞C器支持其自身附帶的基本插件。

安裝和配置 
       Validator框架采用兩個基于XML的配置文件來配置驗證規則。一個是validator-rules.xml,另一個是validation.xml,這兩個文件應該部署在對應于WEB應用程序的WEB-INF文件夾下,對應的兩個jar文件也添加到WEB-INF/lib目錄下。
1、 validation-rules.xml
在validation-rules.xml 文件中配置了一些全局性的驗證規則,使得你在應用程序中使用校驗而不用關注實現細節。這個配置文件是Validator 框架自帶的,可以用在所有Struts應用中。它默認配置了許多很常用的規則,一般來說,不用去更改它,除非需要擴展或修改這些默認的驗證規則。
建議:即使你需要擴展一些規則,也不要去修改validation-rules.xml,而是通過新的配置文件去定義你所擴展的校驗規則。
validator-rules.xml文件的根元素是form-validation,它包含一到多個global元素,global元素包含一到多個validator 元素。
每一個validator 元素定義了一個唯一的驗證規則。下面是validation-rules.xml 文件中的一個片斷, (mask)驗證規則:
<validator name="mask" 
    classname="org.apache.struts.validator.FieldChecks" 
    method="validateMask" 
    methodParams="java.lang.Object, 
                  org.apache.commons.validator.ValidatorAction, 
                  org.apache.commons.validator.Field, 
                  org.apache.struts.action.ActionMessages, 
                  org.apache.commons.validator.Validator, 
                  javax.servlet.http.HttpServletRequest" 
    depends=""
msg="errors.invalid"/>
1) name:                  賦予驗證規則的一個唯一的名稱。
2) classname:           指的是具體實現驗證規則的類。
3) method:               指包含具體實現類的方法。
4) methodParams:    聲明method屬性所指定的方法參數,多個參數之間用逗號分隔。
5) depends:              指定在調用當前的嚴整規則之前必須先調用的其他驗證規則。多個則用逗號分隔。
6) msg:                   指定來自于Resource Bundle中的消息key。當驗證失敗時,validator框架根據這個消息key到Resource Boundle中查找匹配的消息。
2、 validation.xml 
      Validator框架所需要的第二個配置文件是validation.xml,這個配置文件是具體應用(項目)所特定的,可以根據你的應用(項目)情況進行自定義配置。它描述了具體的ActionForm使用validation-rules.xml文件中的哪個驗證規則進行驗證。
一個自定義的驗證規則如下:
<form-validation> 
    <formset> 
        <form name="loginActionForm"> 
            <field property="username" depends="required"> 
                <arg key="label.username" /> 
            </field> 
            <field property="userpass" depends="required"> 
                <arg key="label.password" /> 
            </field> 
        </form> 
    </formset>
</form-validation>
Validator.xml文件的根元素為<form-validation>元素,它包含兩個子元素:<global>和<formset>元素。 
1) <global>元素可以定義<constant>子元素,它用來定義常量表達式。 
2)  <formset>元素包含兩個子元素:<contant>和<form>。
3) <form>元素用于為表單配置驗證規則,它的name屬性表示你驗證formBean,必須和struts-config.xml里面FormBean名字保持一致。<form>元素可以包含一個或多個<field>子元素。 
4) <field>元素是針對表單中字段的驗證規則。Property屬性用于指定FormBean中需要驗證的字段的名稱,depends屬性用于指定字段的驗證規則,多個用逗號分隔。 
5) <arg>元素表示出錯時的主體信息,key 是你屬性文件里面的key。 
6) 主要是對前面<depends>元素包含的驗證規則的定義。
3、插入Validator 
       每一個Struts應用需要知道是否使用了Validator框架,可以通過PlugIn(插件)機制將Validator框架配置到Struts應用中。
下面的代碼演示了如何將Validator 作為一個插件加入到Struts 應用中,在Struts 應用的配置文件Struts-config.xml 中加入如下代碼片段:
<plug-in className="org.apache.struts.validator.ValidatorPlugIn"> 
    <set-property property="pathnames"  
                  value="/WEB-INF/validator-rules.xml,/WEB-INF/validator.xml"/>
</plug-in>
pathnames屬性的值用來指定Validator 框架所使用的配置文件,多個配置文件之間用逗號分隔。 當應用啟動的時候,Struts框架將調用ValidatorPlugIn的init()方法。Validator框架的配置文件將會加載到內存中供應用使用。在init()方法被調用之前,pathnames所指定的值將會傳遞給ValidatorPlugIn的實例,ValidatorPlugIn實例將會依據這個值去加載配置文件。
案例說明:根據前面的例子我們進行進階,要求用戶輸入用戶名、密碼。并且用戶名、密碼是必須,若為空,則提示錯誤信息。
A、服務器段驗證 
       1、修改FormBean 
              我們以前的是繼承ActionForm,現在改成ValidatorForm,導入相應的包,并刪除validator和reset方法。 
       2、修改struts-config.xml文件,具體代碼如下:
<action  
       path="/login"  
       name="loginActionForm"  
       scope="request" 
       type="org.zhoudq.webapp.action.LoginAction" 
       validate="true"  
       input="/login.jsp">
 
              <forward name="success" path="/success.jsp" /> 
              <forward name="error" path="/wrong.jsp" />
</action> 
      將validator改為true,告訴服務器對這個表單進行驗證,input的值,是告訴服務器如果嚴整失敗的話,將跳轉的頁面。
3、添加驗證規則 
 在WEB-INF下創建validaton.xml這個文件,導入引用的dtd,添加如下內容:
<form-validation> 
    <formset> 
        <form name="loginActionForm"> 
            <field property="username" depends="required"> 
                <arg key="label.username" /> 
            </field> 
            <field property="userpass" depends="required"> 
                <arg key="label.password" /> 
            </field> 
        </form> 
    </formset>
</form-validation>
3、修改Resource Boundle文件:
英文的資源文件:applicationResource_en_US.properties
errors.required={0} is required.
errors.minlength={0} can not be less than {1} characters.
errors.maxlength={0} can not be greater than {1} characters.
errors.invalid={0} is invalid.
errors.byte={0} must be a byte.
errors.short={0} must be a short.
errors.integer={0} must be an integer.
errors.long={0} must be a long.
errors.float={0} must be a float.
errors.double={0} must be a double.
errors.date={0} is not a date.
errors.range={0} is not in the range {1} through {2}
errors.creditcard={0} is an invalid credit card number.
errors.email={0} is an invalid e-mail address.
button.submit=Submit
button.reset=Reset
button.cancel=Cancel
label.username=UserName:
label.password=Password:
loginform.error.username=please enter your username
loginform.error.password=please enter your password
loginform.fail=invalidation name and password,login error!
中文的資源文件:applicationResource_zh_CN.properties
errors.required={0} 是必須的.
errors.minlength={0} 不能少于 {1} 個字符.
errors.maxlength={0} 不能多于 {1} 個字符.
errors.invalid={0} 是非法的.
errors.byte={0} 必須是 byte 類型.
errors.short={0} 必須是 short 類型.
errors.integer={0} 必須是 Integer 類型.
errors.long={0} 必須是 long 類型.
errors.float={0} 必須是 float 類型.
errors.double={0} 必須是 double 類型.
errors.date={0} 不是一個日期.
errors.range={0} 不在 {1}- {2} 之間.
errors.creditcard={0} 是一個非法的身份證號r.
errors.email={0} 是一個非法的油箱地址.
button.submit=確定
button.reset=重置
button.cancel=取消
label.username=用戶名:
label.password=密碼:
loginform.error.username=請輸入用戶名
loginform.error.password=請輸入密碼
loginform.fail=用戶名或密碼錯誤,登錄失敗!
5、在struts-config.xml添加validator
<plug-in className="org.apache.struts.validator.ValidatorPlugIn"> 
    <set-property property="pathnames"  
                  value="/WEB-INF/validator-rules.xml,/WEB-INF/validator.xml"/>
</plug-in>
5、運行 
        打開IE,鍵入:http://localhost:8080/Struts1_Login/login.jsp,直接點確定,如下圖:



B、客戶端驗證 
       這也表現了Validator驗證框架的強大之處,又服務器生成javascript腳本,這樣就直接在客戶端進行驗證了,從而減少了服務器的壓力,萬事有力又有避,這中方式服務器在生成腳本的同時又犧牲能性能,呵呵,看如何實現吧,一定很振奮吧. 
   1) 修改login.jsp頁面
<%@ page contentType="text/html; charset=GBK"%>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<html:html> 
    <head><title>login</title></head> 
    <body bgcolor="#ffffff"> 
    <h1>login</h1> 
    <div> 
        <font color="red"> 
            <html:messages id="error"> 
                <li><bean:write name="error"/></li> 
            </html:messages> 
           </font> 
       </div> 
    <html:javascript formName="loginActionForm" /> 
    <html:form action="login.do" onsubmit="return validateLoginActionForm(this);">
 
    <bean:message key="label.username"/> 
    <html:text property="username" /> 
    <br /> 
    <bean:message key="label.password"/> 
    <html:text property="userpass" /> 
    <br> 
    <html:submit property="submit"><bean:message key="button.submit"/></html:submit> 
    &nbsp;<html:reset><bean:message key="button.reset"/></html:reset> 
    </html:form> 
    </body>
</html:html>
a)<html:javascript formName="loginActionForm" />表示生成js代碼,formName屬性指定驗證表單的名字,必須和struts-config.xml里面的form一樣。
b)<html:form action="login.do" onsubmit="return validateLoginActionForm(this);"> 
 當用戶提交表單的時候,就會調用<html:javascript>標簽生成的javascript腳本的方法,從而執行客戶端的驗證,其中的LoginActionForm是你FormBean的名字對用,必須和struts-config.xml里面的form一樣,在這里面第一個字母大寫哦。
2)運行測試:
打開IE,鍵入:http://localhost:8080/Struts1_Login/login.jsp,直接點確定,如下圖:





發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久久久久久久久99| 欧美一区第一页| 色哟哟亚洲精品一区二区| 在线视频免费一区二区| 国内精品在线一区| 国产主播喷水一区二区| 尤物精品国产第一福利三区| 97超碰色婷婷| 欧美成人中文字幕在线| 亚洲黄色在线看| 亚洲午夜av电影| 国产欧美精品日韩精品| 日韩欧美成人精品| 亚洲人成电影网站| 国产999在线| 欧美人交a欧美精品| 中国人与牲禽动交精品| 国产精品免费一区二区三区都可以| 中文日韩在线观看| 国产精品小说在线| 91午夜在线播放| 亚洲91精品在线| 91人成网站www| 国产激情综合五月久久| 欧美日韩激情小视频| 萌白酱国产一区二区| 97精品久久久| 一区二区三区精品99久久| 日韩欧美极品在线观看| 国产精品第2页| 亚洲自拍偷拍福利| 国产国语videosex另类| 中文字幕成人在线| 992tv成人免费视频| 美日韩精品视频免费看| 国产精品久久一区主播| 久久亚洲精品国产亚洲老地址| 亚洲高清一二三区| 欧美日韩午夜视频在线观看| 91久久久亚洲精品| 亚洲精品国产成人| 久久色精品视频| 日韩中文视频免费在线观看| 日韩中文字幕视频| 欧美在线亚洲在线| 成人免费看吃奶视频网站| 精品久久久久久中文字幕| 欧美午夜久久久| 欧美激情欧美激情| 欧美自拍视频在线| 中文字幕在线观看亚洲| 成人有码在线视频| 午夜精品一区二区三区视频免费看| 色哟哟网站入口亚洲精品| 91经典在线视频| 欧美视频第一页| 国产成人福利视频| 国产91精品在线播放| 欧美成人中文字幕在线| 成人精品久久av网站| 久久久久久久国产精品| 欧美亚洲国产日韩2020| 国产成人综合精品在线| 国产综合视频在线观看| 一本一本久久a久久精品综合小说| 欧美国产日韩一区二区三区| 国产欧美日韩高清| 欧美久久精品午夜青青大伊人| 日韩视频在线免费观看| 亚洲在线免费观看| 精品国产视频在线| 久久精品国产一区| 日韩色av导航| 亚洲一区二区三区毛片| 欧美日韩加勒比精品一区| 国产成人精品久久亚洲高清不卡| 亚洲精品美女视频| 久久夜精品va视频免费观看| 久久久久久国产免费| 国产第一区电影| 亚洲国产精品久久精品怡红院| 欧美精品一二区| 亚洲人成网站777色婷婷| 欧美精品少妇videofree| 色婷婷久久av| 欧美大码xxxx| 欧美国产日韩二区| 91九色蝌蚪国产| xxxx性欧美| 国产精品视频午夜| 亚洲精品国产美女| 欧美国产视频一区二区| 91视频8mav| 免费不卡在线观看av| 国产日本欧美视频| 欧美洲成人男女午夜视频| 91av视频导航| 国产精品久久在线观看| 欧美丝袜美女中出在线| 日韩欧美国产网站| 欧美丝袜美女中出在线| 国产精品久久国产精品99gif| 国产欧美一区二区三区视频| 国产91网红主播在线观看| 国产精品日韩专区| 一本一本久久a久久精品牛牛影视| 亚洲欧美日韩一区二区在线| 蜜月aⅴ免费一区二区三区| 91影视免费在线观看| 久久久久久久影视| 中文字幕日韩欧美精品在线观看| 日本久久久久久久久久久| 清纯唯美日韩制服另类| 欧美高清视频在线| 日韩高清电影免费观看完整| 成人激情视频在线| 不卡av在线播放| 亚洲一区二区三区在线视频| 国产成人精品日本亚洲| 丝袜美腿亚洲一区二区| 粗暴蹂躏中文一区二区三区| 911国产网站尤物在线观看| 九九精品视频在线观看| 日韩av第一页| 日韩av影院在线观看| 亚洲国产欧美日韩精品| 欧美成人激情图片网| 色综合久久久888| 国产97在线视频| 国产视频精品自拍| 欧美国产日本在线| 欧美日韩在线免费| 亚洲香蕉成人av网站在线观看| 久久久久久久久久国产精品| 国内外成人免费激情在线视频| 国产自摸综合网| 国产精品亚洲片夜色在线| 亚洲香蕉av在线一区二区三区| 欧美一区二区大胆人体摄影专业网站| 在线激情影院一区| 色综合视频一区中文字幕| 亚洲加勒比久久88色综合| 色先锋资源久久综合5566| 国产精品99蜜臀久久不卡二区| 国产精品成人一区二区| 欧美性xxxx极品hd欧美风情| 精品中文字幕乱| 91麻豆桃色免费看| 日本午夜精品理论片a级appf发布| 亚洲国产成人精品久久久国产成人一区| 国产欧美亚洲精品| 久久精品国产亚洲一区二区| 精品国产欧美一区二区三区成人| 日韩中文字幕免费视频| 亚洲区bt下载| 91久久久久久久一区二区| 九九热99久久久国产盗摄| 久久精品影视伊人网| 日韩亚洲一区二区| 国产日本欧美一区二区三区| 国产在线拍偷自揄拍精品| 国产亚洲aⅴaaaaaa毛片| 91亚洲精华国产精华| 中文字幕亚洲综合|