欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Struts 2與AJAX(第三部分)
本文將介紹在Struts 2中使用DWR實(shí)現AJAX表單校驗。

什么是DWR

DWR(Direct Web Remoting)是在Java EE中較流行的AJAX框架,它的最大優(yōu)勢就是可以像使用本地的Javascript函數一樣,調用服務(wù)器上的Java方法。如下圖所示:


圖1 DWR工作原理

其實(shí)DWR原理也不復雜,它先在web.xml中配置一個(gè)Servlet,映射到特定的路徑(通常是%CONTEXT_PATH%/dwr/*)。這個(gè)Servlet的作用就是初始化要暴露給Javascript調用的Java類(lèi)(通過(guò)dwr.xml進(jìn)行配置),并生成相應的代理的Javascript類(lèi)代碼。在XHR請求到來(lái)的時(shí)候,Servlet負責將請求的參數變成對應的Java對象,并以其為參數調用目標Java方法,并將返回值轉化為Javascript代碼。詳情請參考:http://getahead.ltd.uk/dwr/

Struts 2與DWR

在Struts 2.0.x中使用DWR實(shí)現AJAX表單校驗。在大家掌握了DWR的原理后,下面我想詳細介紹一下實(shí)現的步驟。

首先,到以下站點(diǎn)https://dwr.dev.java.net/files/documents/2427/47455/dwr.jar下載DWR的1.1.4版本的JAR包。需要注意的是,DWR雖然已經(jīng)發(fā)布2.0版本,但它與1.1.4有很大的區別,所以請大家不要使用2.0版本,否則會(huì )出現異常的;

接著(zhù),新建WEB工程,將下圖所示的JAR包加入到工程的“Build Path”中;


圖2 依賴(lài)的JAR包

接下來(lái),配置web.xml文件,內容如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" version="2.4"
    xmlns
="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation
="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

   
<display-name>Struts 2 AJAX Part 3</display-name>

   
<filter>
       
<filter-name>struts-cleanup</filter-name>
       
<filter-class>
            org.apache.struts2.dispatcher.ActionContextCleanUp
       
</filter-class>
   
</filter>

   
<filter-mapping>
       
<filter-name>struts-cleanup</filter-name>
       
<url-pattern>/*</url-pattern>
   
</filter-mapping>

   
<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>
   
<!-- 開(kāi)始DWR配置 -->
   
<servlet>
       
<servlet-name>dwr</servlet-name>
       
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
       
<init-param>
           
<param-name>debug</param-name>
           
<param-value>true</param-value>
       
</init-param>
   
</servlet>

   
<servlet-mapping>
       
<servlet-name>dwr</servlet-name>
       
<url-pattern>/dwr/*</url-pattern>
   
</servlet-mapping>
   
<!-- 結束DWR配置 -->
   
<welcome-file-list>
       
<welcome-file>index.html</welcome-file>
   
</welcome-file-list>

</web-app>
清單1 WebContent/WEB-INF/web.xml

然后是DWR的配置文件:

<?xml version="1.0" encoding="UTF-8"?>

<!-- START SNIPPET: dwr -->
<!DOCTYPE dwr PUBLIC 
    "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" 
    "http://www.getahead.ltd.uk/dwr/dwr10.dtd"
>

<dwr>
   
<allow>
       
<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>
<!-- END SNIPPET: dwr -->
清單2 WebContent/WEB-INF/dwr.xml

通過(guò)以上配置,我們可以將DWRValidator中的方法暴露為Javascript可以調用的遠程接口。

在正確完成以上步驟之后,我們發(fā)布運行一下應用程序,在瀏覽器地址欄中輸入http://localhost:8080/Struts2_Ajax3/dwr/,應該會(huì )出現如下頁(yè)面:


圖3 DWR Servlet默認輸出頁(yè)面

 接下來(lái),我們要開(kāi)始編寫(xiě)Action類(lèi)了,代碼如下:

package tutorial;

import com.opensymphony.xwork2.ActionSupport;

public class AjaxValidation extends ActionSupport {
   
private static final long serialVersionUID = -7901311649275887920L;

   
private String name;
   
private String password;
   
private int age;
   
   
public int getAge() {
       
return age;
   }

   
   
public void setAge(int age) {
       
this.age = age;
   }

   
   
public String getName() {
       
return name;
   }

   
   
public void setName(String name) {
       
this.name = name;
   }

   
   
public String getPassword() {
       
return password;
   }

   
   
public void setPassword(String password) {
       
this.password = password;
   }

   
   @Override
   
public String execute() {        
       
return SUCCESS;
   }

}
清單3 src/tutorial/AjaxValidation.java

上述代碼一目了然,相信大家已經(jīng)很熟悉了。下面,我們再來(lái)看看表單校驗的配置代碼:

<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
   
<validator type="regex">
       
<param name="fieldName">password</param>
       
<param name="expression">
           
<![CDATA[(?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{8,10})$]]>
       
</param>
       
<message>Password must be between 8 and 10 characters, contain at least one digit and one alphabetic character, and must not contain special characters</message>
   
</validator>    
   
<field name="name">
       
<field-validator type="requiredstring">
           
<message>You must enter a name</message>
       
</field-validator>
   
</field>
   
<field name="age">
       
<field-validator type="int">
           
<param name="min">18</param>
           
<param name="max">127</param>
           
<message>Age must be between 18 and 127</message>
       
</field-validator>
   
</field>
</validators>
清單4 src/tutorial/AjaxValidation-validation.xml

對于A(yíng)jaxValidation類(lèi)的name、password和age三個(gè)字段,我分別用了非空、正規表達式和范圍驗證。正規表達式(?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{8,10})$的作用是保證密碼由至少包括一個(gè)數字和一個(gè)字母,且不能含有符號的長(cháng)度為8到10的字符串組成。它也是所謂強密碼(Strong Password)的普通實(shí)現。

接下來(lái)的是JSP的代碼,內容如下:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding
="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
   
<head>
       
<title>Struts 2 AJAX - Validation</title>
       
<s:head theme="ajax" />
   
</head>
   
<body>
       
<h2>
            AJAX Validation Using DWR
       
</h2>
       
<s:form method="post" validate="true" theme="ajax">
           
<s:textfield label="Name" name="name" />
           
<s:password label="Password" name="password" />
           
<s:textfield label="Age" name="age" />
           
<s:submit />
       
</s:form>
   
</body>
</html>
清單5 WebContent/AjaxValidation.jsp

以上代碼也不復雜,不過(guò)需要的是注意的是除了要加入<s:head theme="ajax" />外,<s:form />也必須加入validate="true" theme="ajax"的屬性。

最后是Struts 2的配置文件,內容如下所示:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd"
>

<struts>
   
<package name="Struts2_AJAX_DEMO" extends="struts-default">
       
<action name="AjaxValidation" class="tutorial.AjaxValidation">
           
<result name="input">AjaxValidation.jsp</result>
           
<result>AjaxValidation.jsp</result>
       
</action>
   
</package>
</struts>
清單6 src/struts.xml

最后發(fā)布運應用程序,在瀏覽器地址欄中輸入http://localhost:8080/Struts2_Ajax3/AjaxValidation!input.action出現如下圖所示頁(yè)面:


圖4 AjaxValidation頁(yè)面輸出

在文本框中輸入錯誤的值使頁(yè)面出現錯誤提示信息,如下圖所示:


圖5 AjaxValidation頁(yè)面錯誤提示

可能有朋友會(huì )問(wèn)怎么知道這是通過(guò)AJAX進(jìn)行校驗的呢?在這里我向大家推薦一個(gè)AJAX開(kāi)發(fā)必備的工具——Firebug。Firebug是Firefox的一個(gè)功能強大的插件,它可以準確地輸出和定位Javascript的錯誤、通過(guò)直觀(guān)的方式查看HTML文檔的DOM及其樣式、所見(jiàn)即所得的編輯方式,更值得一贊的是它可以方便地對Javascript進(jìn)行跟蹤和調試,如果你希望這進(jìn)一步了解這個(gè)工具,請安裝Firefox 2.0以上版本,并使用它瀏覽以下網(wǎng)址http://www.getfirebug.com。

在安裝完成Firebug之后,在Firefox中打開(kāi)http://localhost:8080/Struts2_Ajax3/AjaxValidation!input.action,按“F12”鍵找開(kāi)Firebug窗口,如果你第一次使用Firebug,請點(diǎn)擊其窗口中的鏈接“Enable Firebug”激活插件。之后,點(diǎn)擊“Net”,并在出現的菜單中點(diǎn)擊選中“XHR”。然后將光標移入文本框,再將光標移出使文本框失去焦點(diǎn),你可以看到Firebug窗口會(huì )多出一項記錄,如下圖所示:


圖6 Firebug中查看XHR請求

這就證明你在文本框失去焦出時(shí),Struts 2會(huì )發(fā)送XHR請求到服務(wù)器以對該文本框值進(jìn)行校驗。有興趣的朋友可以通過(guò)Firebug,研究XHR的請求與響應,這樣可以加深對DWR工作原理的理解。

何時(shí)使用AJAX表單校驗

雖然在Struts 2實(shí)現AJAX表單校驗是一件非常簡(jiǎn)單的事,但我建議大家不要在所有的場(chǎng)合都使用這個(gè)功能,原因可以分為以下幾個(gè)方面:

  1. AJAX校驗在服務(wù)器上進(jìn)行數據校驗,可能會(huì )比較耗時(shí);
  2. AJAX校驗可能會(huì )過(guò)于頻繁,加重服務(wù)器的負載;
  3. 一些普通的校驗,只需要使用純Javascript便可以實(shí)現。

讀到這里,有的朋友可能會(huì )問(wèn):“那么什么時(shí)候才應該使用AJAX表單校驗呢?”答案其實(shí)很簡(jiǎn)單,當我們的校驗在頁(yè)面加載時(shí)還不能夠確定的情況下,就應該使用這個(gè)功能。例如,注冊用戶(hù)時(shí),校驗用戶(hù)名是否已經(jīng)存在;或者校驗涉及過(guò)多的頁(yè)務(wù)邏輯等。

現在讓我們來(lái)改造一下上述例子,對于name我們可以使用AJAX校驗,但對于其它的字段應該使用純Javascript的校驗。

在tutorial.AjaxValidation類(lèi)加入如下方法:

   @Override
   
public void validate() {
       Set
<String> users = new HashSet<String>();
       users.add(
"max");
       users.add(
"scott");
       
if(users.contains(name)) {
           addFieldError(
"name", "The user name has been used!");
       }

   }
清單7 src/tutorial/AjaxValidation.java代碼片段

用于模擬用戶(hù)注冊的場(chǎng)境,當然在真實(shí)情況應該在數據庫中檢查用戶(hù)是否存在。

接下來(lái)再修改JSP文件,將<s:form />里面的內容改為如下所示代碼:

        <s:form method="post" validate="true" theme="ajax_xhtml">
           
<s:textfield label="Name" name="name" theme="ajax" />
           
<s:password label="Password" name="password" theme="xhtml" />
           
<s:textfield label="Age" name="age" theme="xhtml" />
           
<s:submit theme="xhtml" />
       
</s:form>
清單8 WebContent/AjaxValidation.jsp代碼片段

對比早前的JSP代碼,大家可以看出我將<s:form />的theme改成了“ajax_xhtml”,這個(gè)theme不是Struts 2自帶,需要自定義。另外,除了Name使用了ajax的theme之外,其它的表單標簽的theme都為xhtml,如此一來(lái)便可以實(shí)現只有當Name文本框失去焦點(diǎn)時(shí)才發(fā)生AJAX表單校驗。

接下來(lái),應該是我們的自定義ajax_xhtml的theme了。在源代碼文件夾下新建包“template.ajax_xhtml”,然后在其中加入form.ftl和form-close.ftl文件,內容分別如下:

<#if parameters.validate?exists>
<script type="text/javascript" src="${base}/struts/validationClient.js"></script>
<script type="text/javascript" src="${base}/dwr/interface/validator.js"></script>
<script type="text/javascript" src="${base}/dwr/engine.js"></script>
<script type="text/javascript" src="${base}/struts/ajax/validation.js"></script>
</#if>
<#include "/${parameters.templateDir}/xhtml/form-validate.ftl" />
<#include "/${parameters.templateDir}/simple/form.ftl" />
<#include "/${parameters.templateDir}/xhtml/control.ftl" />
清單9 src/template/ajax_xhtml/form.ftl

上述的文件與xhtml theme中的form.ftl文件相似,我只是加入了AJAX表單校驗所用的Javascript庫,以便theme為ajax的表單標簽使用。

<#include "/${parameters.templateDir}/xhtml/control-close.ftl" />
<#include "/${parameters.templateDir}/simple/form-close.ftl" />
<#include "/${parameters.templateDir}/xhtml/form-close-validate.ftl" />
清單10 src/template/ajax_xhtml/form-close.ftl

這個(gè)文件與xhtml theme中的form-close.ftl文件相同。

最后發(fā)布運行應用程序,大家可以發(fā)現在Password與Age的校驗,只有在表單提交時(shí)才發(fā)生,而且是純Javascript的校驗。不過(guò),以上代碼還不是很完善,在行為上有些BUG。

總結

Struts 2相比一些其它的框架,在實(shí)現AJAX方面的確簡(jiǎn)單很多。更激動(dòng)人心的是Struts 2的標簽庫支持基于模板的輸出,使得開(kāi)發(fā)者可以跟據自身的需要方便地改變標簽的行為。

在將要發(fā)布的Struts 2.1版本中,AJAX表單校驗將不再使用DWR,統一使用DOJO實(shí)現,詳情請參考:
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
struts2的ajax支持,ajax校驗
[精]采用dwrajax和struts開(kāi)發(fā)文件上傳進(jìn)度條
Struts2的Ajax支持介紹
DWR學(xué)習筆記(四)
AJAX DWR基本使用向導
關(guān)于DWR2.0的配置問(wèn)題
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久