• 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+=" ";
        }
        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='dwr/engine.js'></script>
       <script type='text/javascript' src='dwr/util.js'></script>
       <script type='text/javascript' src='dwr/interface/dwr.js'></script>
       <script type="text/javascript" src="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='dwr/engine.js'></script>
       <script type='text/javascript' src='dwr/util.js'></script>
       <script type='text/javascript' src='dwr/interface/dwrException.js'></script>
       <script type="text/javascript" src="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='dwr/engine.js'></script>
       <script type='text/javascript' src='dwr/util.js'></script>
       <script type='text/javascript' src='dwr/interface/dwr.js'></script>
       <script type="text/javascript" src="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='dwr/engine.js'></script>
       <script type='text/javascript' src='dwr/util.js'></script>
       <script type='text/javascript' src='dwr/interface/dwrBean.js'></script>
       <script type="text/javascript" src="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='dwr/engine.js'></script>
       <script type='text/javascript' src='dwr/util.js'></script>
       <script type='text/javascript' src='dwr/interface/dwrBean.js'></script>

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

  • 相关阅读:
    flink 读取kafka 数据,partition分配
    Flink 报错 "Could not find a suitable table factory for 'org.apache.flink.table.factories.StreamTableSourceFactory' in the classpath"
    flume接收http请求,并将数据写到kafka
    【翻译】Flume 1.8.0 User Guide(用户指南) Processors
    【翻译】Flume 1.8.0 User Guide(用户指南) Channel
    【翻译】Flume 1.8.0 User Guide(用户指南) Sink
    【翻译】Flume 1.8.0 User Guide(用户指南) source
    【翻译】Flume 1.8.0 User Guide(用户指南)
    Apache Flink 简单安装
    Java之使用IDE
  • 原文地址:https://www.cnblogs.com/firstdream/p/4739463.html
Copyright © 2020-2023  润新知