dwr

web、JS技术学习 https://www.itkc8.com

 

DWR3.0 dwr 返回值(数组,集合,Map)

示例代码如下:

 

首先导入项目所需要的包,如下:dwr.jar,commons-logging-1.0.4.jar,版本可以调整;

 

1.web.xml

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

<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4"

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee  http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

 

<servlet>

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

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

   <init-param>

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

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

   </init-param>

   <load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

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

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

</servlet-mapping>

 

</web-app>

 

2.DWRTest.java

package com.micro;

 

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

 

@SuppressWarnings("unchecked")

public class DWRTest {

 

/**

   * 第一个简单调用

   */

public String getStr() {

    return "第一个dwr示例,调用成功";

}

 

/**

   * 带传递参数的调用,返回String

   */

public String getInfo(String name, int age, String address) {

    return "我的名字叫" + name + ",现年" + age + "岁," + "来自" + address;

}

 

/**

   * 返回数组Array

   */

public String[] getStrArray() {

    return new String[] { "one", "two", "three", "go!" };

}

 

/**

   * 返回集合List

   */

public List getList() {

    List list = new ArrayList();

    list.add("welcome");

    list.add("to");

    list.add("BeiJing");

    return list;

}

 

/**

   * 返回Map类型

   */

public Map getMap() {

    Map map = new HashMap();

    map.put("name", "周星星");

    map.put("hobby", "逃课");

    return map;

}

 

/**

   * 返回二维数组类型

   */

public List getArrayList() {

    List list = new ArrayList();

    list.add(new String[] { "1", "2", "3" });

    list.add(new String[] { "one", "two", "three", "four", "five" });

    return list;

}

 

/**

   * Exception处理

   */

public List getListTest(List list) {

    try {

      list.get(0);

    } catch (Exception e) {

      throw new NullPointerException("数据位空");

    }

    return list;

}

 

}

 

3.dwr.xml

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

<!DOCTYPE dwr PUBLIC

    "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"

    "http://getahead.org/dwr/dwr20.dtd">

 

<dwr>

<allow>

   <!-- 调用不同的方法,返回不同的数据类型 -->

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

    <param name="class" value="com.micro.DWRTest" />

   </create>

 

   <!-- 类型转换为JavaBean的处理 -->

   <create javascript="dwrBean" creator="new" scope="request">

    <param name="class" value="com.micro.UserRs" />

   </create>

   <convert match="com.micro.User" converter="bean">

    <param name="include" value="name,pass" />

   </convert>

 

   <!-- 异常Exception的处理 ,默认情况下dwr对异常的处理就是一个弹出框提示为Error-->

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

    <param name="class" value="com.micro.DWRTest" />

   </create>

   <convert match="java.lang.NullPointerException" converter="exception" />

 

</allow>

 

</dwr>

 

4.mydwr.js

/**

* 无参数

*/

function invoke1(){

dwr.getStr(

   function(value){

    alert(value);

   }

);

}

 

/**

* 有参数

*/

function invoke2(){

dwr.getInfo("长江七号",3,"火星",

   function(value){

    alert(value);

   }

);

}

 

/**

* 返回数组

*/

function invoke3(){

dwr.getStrArray(

   function(array){

    var str="";

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

     str += array[i]+" ";

    }

    alert(str);

   }

);

}

 

/**

* 返回集合(集合和数组的处理方式一样)

*/

function invoke4(){

dwr.getList(

   function(list){

    var str="";

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

     str += list[i];

    }

    alert(str);

   }

);

}

/**

* 返回Map

*/

function invoke5(){

dwr.getMap(

 

//有如下两种处理方式

   /*1)已知map的key*/

   function(map){

    alert("姓名:"+map.name+",爱好:"+map.hobby);

   }

   /*2).遍历的方式

    function(map){

    for(var key in map){

     alert(key+":"+map[key]);

    }

   }*/

);

}

 

/**

* 返回数组的集合(二维数组)

*/

function invoke6(){

dwr.getArrayList(

   function(arrayList){

    var str="";

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

     for(var j=0;j<arrayList[i].length;j++){

      str += arrayList[i][j];

     }

     str+="\n\r";

    }

    alert(str);

   }

);

}

 

/**

* 同步设置

*/

function invoke7(){

dwr.engine.setAsync(false);//设置同步,那么后续的方法才能按照顺序执行

invoke1();

invoke2();

}

 

/**

* 批处理batch(按照先后顺序执行)

*/

function invoke8(){

dwr.engine.beginBatch();

invoke1();

invoke2();

dwr.engine.endBatch();

}

 

5.index.jsp

<%@ page language="java" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

   <script type='text/javascript' src='http://yangchao20020.blog.163.com/blog/dwr/engine.js'></script>

   <script type='text/javascript' src='http://yangchao20020.blog.163.com/blog/dwr/util.js'></script>

   <script type='text/javascript' src='http://yangchao20020.blog.163.com/blog/dwr/interface/dwr.js'></script>

   <script type="text/javascript" src="http://yangchao20020.blog.163.com/blog/mydwr.js"></script>

</head>

 

<body>

   <input type="button" value="DRW1" onclick="invoke1()" />

   <br />

   <input type="button" value="DRW2" onclick="invoke2()" />

   <br />

   <input type="button" value="DRW3" onclick="invoke3()" />

   <br />

   <input type="button" value="DRW4" onclick="invoke4()" />

   <br />

   <input type="button" value="DRW5" onclick="invoke5()" />

   <br />

   <input type="button" value="DRW6" onclick="invoke6()" />

   <br />

   <input type="button" value="DRW7" onclick="invoke7()" />

   <br />

   <input type="button" value="批处理测试" onclick="invoke8()" />

</body>

</html>

 

上述,index.jsp页面就对上述各种dwr的返回类型和批处理(batch)做了处理,做了简单的测试,Ok,测试通过,下面再介绍几个页面,

对dwr其他功能的一些简单测试:

 

6.异常处理:exception.jsp

<%@ page language="java" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

   <script type='text/javascript' src='http://yangchao20020.blog.163.com/blog/dwr/engine.js'></script>

   <script type='text/javascript' src='http://yangchao20020.blog.163.com/blog/dwr/util.js'></script>

   <script type='text/javascript' src='http://yangchao20020.blog.163.com/blog/dwr/interface/dwrException.js'></script>

   <script type="text/javascript" src="http://yangchao20020.blog.163.com/blog/mydwr.js"></script>

   

   <script type="text/javascript">

    function convert(){

     var list;

     dwrException.getListTest(list,

      {

       exceptionHandler:function(msg){

        alert(msg);

       },

       callback:function(data){

        alert(data);

       }

      }

     );

    }

    

   </script>

</head>

 

<body>

   <input type="button" value="异常测试" onclick="convert()"/>

</body>

</html>

 

7.dwr.util.getValue()调用,dwrfunc.jsp

<%@ page language="java" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

   <script type='text/javascript' src='http://yangchao20020.blog.163.com/blog/dwr/engine.js'></script>

   <script type='text/javascript' src='http://yangchao20020.blog.163.com/blog/dwr/util.js'></script>

   <script type='text/javascript' src='http://yangchao20020.blog.163.com/blog/dwr/interface/dwr.js'></script>

   <script type="text/javascript" src="http://yangchao20020.blog.163.com/blog/mydwr.js"></script>

</head>

 

<body>

   <input type="text" name="name" id="nameid" />

   <br/>

   <input type="button" value="EL通过id取值" onclick="alert(${'nameid'}.value)" />

   <br />

   

   //如果要是有dwr.util提供的功能,必须引入dwr/util.js文件,dwr3之后,有写函数内写name或id都可以

   <br/>

   <input type="button" value="dwr.util通过id" onclick="alert($('nameid').value)" />

   <br />

   <input type="button" value="dwr.util通过name" onclick="alert($('name').value)" />

   <br />

   <input type="button" value="dwr.util通过name/id" onclick="alert(dwr.util.getValue('name'))" />

   <br />

 

</body>

</html>

 

8.对JavaBean的传递和返回

User.java:

package com.micro;

 

public class User {

 

private String name;;

private String pass;

 

//get/set方法....

}

 

UserRs.java:

package com.micro;

 

public class UserRs {

 

public User convertUser(User user) {

    user.setName("admin");

    user.setPass("123456");

    return user;

}

}

bean.jsp:

<%@ page language="java" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

   <script type='text/javascript' src='http://yangchao20020.blog.163.com/blog/dwr/engine.js'></script>

   <script type='text/javascript' src='http://yangchao20020.blog.163.com/blog/dwr/util.js'></script>

   <script type='text/javascript' src='http://yangchao20020.blog.163.com/blog/dwr/interface/dwrBean.js'></script>

   <script type="text/javascript" src="http://yangchao20020.blog.163.com/blog/mydwr.js"></script>

   

   <script type="text/javascript">

    function convert(){

     var uname = $("name").value;

     var upass = $("pass").value;

     var obj = {name:uname,pass:upass};

     

     dwrBean.convertUser(obj,function(data){

      $("uname").value = data.name;

      $("upass").value = data.pass;

     });

    }

    

   </script>

</head>

 

<body>

   <input type="text" name="name" id="uname" value="you name"/><br/>

   <input type="text" name="pass" id="upass" value="your password"/><br/>

   <input type="button" value="测试处理" onclick="convert()"/>

</body>

</html>

 

这些,只是对dwr的简单应用,其中的配置都在dwr.xml中,大家可以举一反三,通常情况下,dwr和spring要结合使用,下面给出一个简单的配置说明:

比如:

<!-- 验证登陆名是否存在 -->

<create creator="spring" javascript="loginServiceDWR" scope="request">

   <param name="beanName" value="coreLoginService" />

   <include method="checkLogin" />

</create>

其中,creator="spring",表明由spring来创建该对象,javascript="loginServiceDWR",说明客户端的调用名称叫"loginServiceDWR",<param name="beanName" value="coreLoginService" />指明了spring配置文件中,id为"coreLoginService"的这么一个bean,<include method="checkLogin" />,对外公开的方法是"checkLogin" ,调用过程同上述其他类型调用相同,不同就是配置而已。上述代码,仅供参考。

 

注意:引入dwr的js文件的顺序不能错了,如:

 

   <script type='text/javascript' src='http://yangchao20020.blog.163.com/blog/dwr/engine.js'></script>

   <script type='text/javascript' src='http://yangchao20020.blog.163.com/blog/dwr/util.js'></script>

   <script type='text/javascript' src='http://yangchao20020.blog.163.com/blog/dwr/interface/dwrBean.js'></script>

 

先引入dwr自身的,再引入自己的。

 

web、JS技术学习 https://www.itkc8.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值