Dwr配置

Dwr配置

一、配置環境

1.       導入dwr.jar

commons-logging.jar

2.       web.xml 中配置

      <servlet>

           <!-- 指定DWR核心Servlet的名字 -->

           <servlet-name>dwr-invoker</servlet-name>

           <!-- 指定DWR核心Servlet的實現類 -->

           <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>

           <!--  指定DWR核心Servlet處於調試狀態 -->

           <init-param>

                 <param-name>debug</param-name>

                 <param-value>true</param-value>

           </init-param>

      </servlet>

      <!-- 指定核心ServletURL映射 -->

      <servlet-mapping>

           <servlet-name>dwr-invoker</servlet-name>

           <!-- 指定核心Servlet映射的URL -->

           <url-pattern>/dwr/*</url-pattern>

      </servlet-mapping>

3 配置dwr.xml

<dwr>

      <allow>

           <!-- 使用new關鍵資創建一個Java實例

                 指定創建的JavaScript對象名爲hello-->

           <create creator="new" javascript="hello">

                 <!-- 使用class屬性指定創建該Java實例的實現類 -->

                 <param name="class" value="lee.HelloDwr"/>

           </create>

           <!-- lee.Person類使用Bean轉換器 -->

           <convert converter="bean" match="lee.Person"/>

           <!-- lee.Cat使用Object轉換器 -->

           <convert converter="object" match="lee.Cat">

                 <!-- 指定force="true"強制使用反射訪問私有屬性 -->

                 <param name="force" value="true"/>

           </convert>

      </allow>

      <signatures>

        <![CDATA[

           import java.util.List;

           import lee.HelloDwr;

           import lee.Person;

           HelloDwr.sendListNoGeneric(List<Person>);

       ]]>

      </signatures>

//導入所引用的對象或使用泛型定義參數否則dwr 無法解析爲有效javascript 對象

</dwr>

 

二、配置對應的實現類和頁面js

public class HelloDwr

{

      //第一個簡單的hello方法

      public String hello(String name)

      {

           return name + ",您好!您已經開始了DWR的學習之旅,祝您學得開心...";

      }

      //使用一個JavaBean作爲參數的方法

      public String sendObj(Person p )

      {

           return p.getName() + ",您好!您已經學會了使用JavaBean參數...";

      }

      //返回JavaBean實例的方法

      public Person getBean (String name)

      {

           return new Person(name);

      }

      //返回一個普通的Java對象,Cat對象爲其屬性提供settergetter方法

      public Cat getObject(String name)

      {

           return new Cat("服務器端" + name);

      }

      //返回一個集合對象

      public List<Person> getPersonList()

      {

           List<Person> result = new ArrayList<Person>();

           result.add(new Person("集合aaaa"));

           result.add(new Person("集合bbbb"));

           result.add(new Person("集合cccc"));

           return result;

      }

      //返回一個數組對象

      public Person[] getPersonArray()

      {

           Person[] result = new Person[3];

           result[0] = new Person("數組aaaa");

           result[1] = new Person("數組bbbb");

           result[2] = new Person("數組cccc");

           return result;

      }

      //返回一個Map對象

      public Map<String, Person> getPersonMap()

      {

           //創建一個Map對象

           Map<String, Person> result = new HashMap<String, Person>();

           //填充Map對象的內容

           result.put("first" , new Person("Map aaaa"));

           result.put("second" , new Person("Map bbb"));

           result.put("third" , new Person("Map cccc"));

           //返回Map

           return result;

      }

      //遠程方法的參數是集合

      public String sendList(List<Person> pl)

      {

           String result = "";

           for (Person p : pl)

           {

                 result += p.getName() + "<br />";

           }

           return result;

      }

//遠程方法的參數是不帶泛型的集合

public String sendListNoGeneric(List pl)

{

      String result = "";

      for (Object p : pl)

      {

           result += ((Person)p).getName() + "<br />";

      }

      return result;

}

 

      //遠程方法的參數是集合

      public String sendMap(Map<String , Person> pmap)

      {

           String result = "";

           for (String key : pmap.keySet())

           {

                 result += "" + key + " 其值爲:" +

                      pmap.get(key).getName() + "<br />";

           }

           return result;

      }

 

Js 文件

//-------------發送簡單字符串參數,返回普通字符串--------------

function sendMessage()

{

      //獲取頁面中name元素的值

      var name = document.getElementById("name").value;

      //調用遠程方法,cb是回調函數

      hello.hello(name , cb)

}

function cb(data)

{

      document.getElementById("show").innerHTML = data;

}

//-----------發送一個JavaBean對象作爲參數,返回普通字符串------------

function sendObject()

{

      var nameValue = document.getElementById("name").value;

      //調用遠程方法,使用JavaScript對象作爲參數

      hello.sendObj({name:nameValue} , cb);

}

 

//----------------調用返回JavaBean方法-----------------

function getBean()

{

      var name = document.getElementById("name").value;

      //調用遠程方法,beanCb是回調函數

      hello.getBean(name , beanCb)

}

function beanCb(data)

{

      //服務器方法返回JavaBean對象,客戶端的dataJavaScript對象

      document.getElementById("show").innerHTML =

           data.name + ",您好,您已經學會了使用JavaBean返回值";

}

//----------------調用返回getObject方法---------------

function getObject()

{

      var name = document.getElementById("name").value;

      //調用遠程方法,objCb是回調函數

      hello.getObject(name , objCb)

}

function objCb(data)

{

      //服務器方法返回非JavaBean式的對象,客戶端的dataJavaScript對象

      document.getElementById("show").innerHTML =

           data.name + ",是從服務器返回的貓的名字";

}

//---------------調用返回集合的方法--------------

function getBeanList()

{

      //調用遠程方法,listCb返回回調函數

      hello.getPersonList(listCb);

}

//遠程Java方法返回List對象,集合元素是JavaBean式的對象

//此處的dataJavaScript對象數組

function listCb(data)

{

      var result='';

      //遍歷每個數組元素

      for (var i = 0 ; i < data.length ; i ++)

      {

           result += data[i].name + "<br />";

      }

      document.getElementById("show").innerHTML = result;

}

//---------------調用返回數組的方法--------------

function getBeanArray()

{

      hello.getPersonArray(arrayCb);

}

function arrayCb(data)

{

      var result = "";

      //下面的data是遠程Java方法的返回值,

      //data是個數組,遍歷數組。

      for (var i = 0 ; i < data.length ; i ++)</span

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章