<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    贏在執行

    這個世界上只有兩樣東西愈分享愈多,那就是智慧與愛。

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      17 Posts :: 11 Stories :: 13 Comments :: 0 Trackbacks
    Struts2的Ajax輸入校驗   文章指數:0  CSDN Blog推出文章指數概念,文章指數是對Blog文章綜合評分后推算出的,綜合評分項分別是該文章的點擊量,回復次數,被網摘收錄數量,文章長度和文章類型;滿分100,每月更新一次。

        這段時間在研究Struts2,學習資料是新上市的李剛著的《Struts2權威指南》,很不錯的一本書,看了覺得收獲很大。剛研究完Struts2中的Ajax輸入校驗,并做了一些例子,現總結如下:


        Ajax的輸入校驗不是客戶端校驗,而是服務器端校驗,但這種服務器端校驗是以異步方式進行的,瀏覽者無需顯示提交請求,當瀏覽者輸入完成后,系統自動完成校驗。Struts2的Ajax校驗建立在DWR和Dojo兩個框架之上,其中DWR負責實現在JavaScript中調用遠程Java方法,而Dojo則負責實現頁面效果的實現。
    一. 配置DWR的核心Servlet
    DWR是Java領域的Ajax框架,它允許客戶端JavaScript代碼直接調用服務器端的Java方法,而這個過程是通過一個核心Servlet的轉換來實現的。為了讓DWR的核心Servlet起作用,必須在web.xml文件中配置該核心Servlet。配置DWR的核心Servlet的配置片段如下:
    <!-- 配置Struts2的核心Servlet -->
    <servlet>
    <servlet-name>dwr</servlet-name>
    <!-- 指定Servlet的實現類 -->
     <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
     <!-- 指定處于開發階段 -->
     <init-param>
        <param-name>debug</param-name>
        <param-value>true</param-value>
     </init-param>
    </servlet>
    <!-- 指定DWR的核心Servlet攔截的URL -->
    <servlet-mapping>
     <servlet-name>dwr</servlet-name>
     <url-pattern>/dwr/*</url-pattern>
    </servlet-mapping>
    在上面配置文件中增加了DWR的核心Servlet后,該Servlet負責將服務器端的Java方法暴露出來。到底那些Java方法需要被暴露出來,通過在dwr.xml配置文件中指定即可,因此需要在本應用中增加一個dwr.xml文件。
    提示:此處并不許需要開發者自己開發Ajax應用,并不需要開發者利用DWR框架,我們只需利用Struts2對DWR的封裝即可。因此,只需在Web應用的WEB-INF路徑下增加dwr.xml文件即可,而且dwr.xml文件的代碼也是固定的:
    <!DOCTYPE dwr PUBLIC
     "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
     " <dwr>
     <!-- 定義所有需要被暴露的Java方法 -->
         <allow>
      <!-- 定義將org.apache.struts2.validators.DWRValidator創建成一個validator對象 -->
             <create creator="new" javascript="validator">
                 <param name="class" value="org.apache.struts2.validators.DWRValidator"/>
             </create>
      <!-- 定義一個轉換器 -->
             <convert converter="bean" match="com.opensymphony.xwork2.ValidationAwareSupport"/>
         </allow>
         <signatures>
            <![CDATA[
            import java.util.Map;
            import org.apache.struts2.validators.DWRValidator;
            DWRValidator.doPost(String, String, Map<String, String>);
            ]]>
         </signatures>
    </dwr>
    在上面配置文件中,將org.apache.struts2.validators.DWRValidator類創建成一個JavaScript對象,這個對象名為validator。當然,這里所說的創建是假創建,因為Java類是無法創建JavaScript對象,但DWR提供一種方式,允許當我們在客戶端調用validator的方法時,轉換成調用DWRValidator實例的方法。
    提示:關于DWR的運行原理和使用細節,請讀者參考筆者所著的《基于J2EE的Ajax寶典》一書。此處由于篇幅管理,無法詳述DWR的用法和細節。
    實際上,對于一個Struts2的開發者而言,無需理會這些實現細節,因為Struts2已經為我們提供了這些封裝,我們只需要在Struts2封裝的基礎上進行開發即可。
    值得指出的是,為了讓Web應用增加DWR支持,顯然還需要將DWR的二進制包復制到Web應用中。即使對于Struts2.0.6正式版,依然不支持DWR的的最新版本(DWR的最新版本是2.0.1),因此只能使用DWR的前一個正式版1.1.3,將dwr-1.1.3.jar文件復制到Web應用中即可。
    提示:由于Struts2發行版中并未包含DWR二進制文件。因此,dwr-1.1.3.jar文件必須到DWR的官方站點(
    http://getahead.ltd.uk/dwr/)自行下載。

    二. 設置頁面的Ajax主題
    正如前面已經提到的,實現Ajax交互必須在頁面中導入Ajax風格的controlheader.ftl,這個控件負責當每個輸入組件失去焦點時,將輸入結果發送到服務器端進行校驗。
    為了實現Ajax校驗,還需要將表單設置成Ajax主題,并且設置validate="true"。下面是本示例應用中regist.jsp頁面的代碼:
    <%@ page language="java" contentType="text/html; charset=GBK"%>
    <!-- 導入Struts2標簽庫 -->
    <%@taglib prefix="s" uri="/struts-tags"%>
    <html>
    <head>
    <title>請輸入您的注冊信息</title>
    <!-- 導入Ajax主題的controlheader.ftl -->
    <s:head theme="ajax"/>
    </head>
    <body>
    <H1>請輸入您的注冊信息</H1>
    <!-- 設置表單使用Ajax主題,并且設置validate="true" -->
    <s:form action="regist" theme="ajax" validate="true">
     <s:textfield name="name" label="作者名"/><br>
     <s:textfield name="pass" label="密碼"/>
     <s:textfield name="age" label="年齡"/>
     <s:textfield name="birth" label="生日"/>
     <s:submit value="注冊"/>
    </s:form>
    </body>
    </html>
    在上面的表單被設置成Ajax主題(這將意味著該表單是一個遠程表單),并且設置了validate="true"屬性。一旦完成了上面設置后,當某個輸入組件失去焦點時,系統會負責將輸入內容發送到服務器端進行校驗。

    三. 設置校驗規則
    對于使用Ajax校驗的Action類,與基本校驗的Action類并沒有太大的不同之處。但必須指出:盡量不要重寫Action類的validate方法,重寫該方法來完成Ajax校驗可能出現一些未知異常(這可能是Struts2還需要完善的地方)。
    注意:不同通過重寫validate方法來完成Ajax校驗。
    為了完成輸入校驗,我們通過定義自己的校驗規則文件來完成輸入校驗,本輸入校驗文件使用字段校驗器風格來配置校驗規則。下面是校驗文件的代碼:
    文件,該文件指定了Action的屬性必須滿足怎樣的規則,下面是該應用中Action的校驗文件的代碼。
    <?xml version="1.0" encoding="GBK"?>
    <!-- 指定校驗配置文件的DTD信息 -->
    <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
     " <!-- 校驗文件的根元素 -->
    <validators>
     <!-- 校驗Action的name屬性 -->
         <field name="name">
      <!-- 指定name屬性必須滿足必填規則 -->
             <field-validator type="requiredstring">
       <param name="trim">true</param>
                 <message>必須輸入名字</message>
             </field-validator>
      <!-- 指定name屬性必須匹配正則表達式 -->
             <field-validator type="regex">
                <param name="expression"><![CDATA[(\w{4,25})]]></param>
                 <message>您輸入的用戶名只能是字母和數組,且長度必須在4到25之間</message>
    </field-validator>
         </field>
     <!-- 校驗Action的pass屬性 -->
     <field name="pass">
      <!-- 指定pass屬性必須滿足必填規則 -->
      <field-validator type="requiredstring">
       <param name="trim">true</param>
       <message>必須輸入密碼</message>
      </field-validator>
      <!-- 指定pass屬性必須滿足匹配指定的正則表達式 -->
      <field-validator type="regex">
       <param name="expression"><![CDATA[(\w{4,25})]]></param>
       <message>您輸入的密碼只能是字母和數組,且長度必須在4到25之間</message>
      </field-validator>
     </field>
     <!-- 指定age屬性必須在指定范圍內-->
     <field name="age">
      <field-validator type="int">
       <param name="min">1</param>
       <param name="max">150</param>
       <message>年紀必須在1到150之間</message>
      </field-validator>
    </field>
     <!-- 指定birth屬性必須在指定范圍內-->
     <field name="birth">
      <field-validator type="date">
       <!-- 下面指定日期字符串時,必須使用本Locale的日期格式 -->
       <param name="min">1900-01-01</param>
       <param name="max">2050-02-21</param>
       <message>年紀必須在${min}到${max}之間</message>
      </field-validator>
     </field>
    </validators>
    實際上,這份校驗文件與之前進行基本校驗的校驗文件并沒有太大的區別。這也證明了Struts2框架的簡單、易用。
    完成上面定義后,如果瀏覽者在輸入頁面中輸入用戶名,將焦點移到密碼輸入框時,將看到Ajax校驗效果。


    Feedback

    # re: Struts2的Ajax輸入校驗 [未登錄] 2008-05-06 09:35 過客
    你這是總結嗎?直接把書上的內容打進電腦上了.  回復  更多評論
      

    # re: Struts2的Ajax輸入校驗 2008-05-27 17:51 小騙子
    校驗是校驗了,那校驗后信息提示信息的位置怎么設置?
      回復  更多評論
      

    # re: Struts2的Ajax輸入校驗 2008-09-30 18:03 ffff
    暈了,李剛的書。一字不差。就是不能用  回復  更多評論
      

    # re: Struts2的Ajax輸入校驗 [未登錄] 2009-01-17 10:07 anson
    試試!那有電子書阿?
      回復  更多評論
      

    # re: Struts2的Ajax輸入校驗 2009-02-25 18:19 kao
    這樣有意思嗎?無聊
    照抄  回復  更多評論
      

    # re: Struts2的Ajax輸入校驗 2009-02-26 22:22 樓主是個托
    是李剛的一個書托  回復  更多評論
      

    # re: Struts2的Ajax輸入校驗 [未登錄] 2009-04-04 20:19 java
    不看還好,一看就來氣。這本書不適合初學者,該舉例子的時候一筆帶過。總是使用前面的例子來對后面的進行說明,沒有考慮讀者根本不會將例子記住。所以不得不不斷翻閱前面的內容。而且對路徑問題含糊不清,源代碼不全。可能適合有一定基礎的人,但對初學者來說,只會耽誤跟多時間1  回復  更多評論
      

    # re: Struts2的Ajax輸入校驗 2011-07-22 15:12 阿斯頓發
    只使用于struts2.0版本,2.1以后的不能用  回復  更多評論
      


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 久99久精品免费视频热77| 最近免费中文字幕视频高清在线看| 久久久国产亚洲精品| 国产精品亚洲一区二区三区在线| 99视频在线精品免费观看6| 精品亚洲永久免费精品| 猫咪免费人成网站在线观看入口| 亚洲一区二区三区国产精品无码| 亚洲国产精品VA在线看黑人| 亚洲狠狠爱综合影院婷婷| 成人a免费α片在线视频网站| 日韩精品内射视频免费观看| 国产精品小视频免费无限app| 精品在线免费视频| 亚洲性色AV日韩在线观看| 亚洲精品综合久久中文字幕 | 亚洲噜噜噜噜噜影院在线播放| 亚洲精品无码精品mV在线观看| 免费在线观看理论片| 日韩一级免费视频| 成年人免费观看视频网站| 噼里啪啦免费观看高清动漫4| 2019中文字幕免费电影在线播放| 成人黄网站片免费视频| 久久久久久国产a免费观看不卡| 一边摸一边爽一边叫床免费视频| 香蕉97碰碰视频免费| 亚洲Av永久无码精品一区二区| 亚洲最大无码中文字幕| 亚洲熟妇无码AV| 亚洲色偷偷色噜噜狠狠99网| 国产日本亚洲一区二区三区| 亚洲无码一区二区三区| 中文字幕乱码亚洲精品一区| 亚洲欧美成aⅴ人在线观看| 亚洲乱亚洲乱妇无码| 亚洲成a人片在线观看天堂无码| 亚洲hairy多毛pics大全| 色婷婷六月亚洲综合香蕉| 麻豆va在线精品免费播放| 人人公开免费超级碰碰碰视频|