1、获得对象

2、获得List对象

3、添加用户

1、  异常处理

 

1、public class User {

    private int id;

    private String username;

    private Group group;

2、public class Group {

    private int id;

    private String name;

 

3、编写MyDwr类

public class MyDwr {

public String hello(String world){

    System.out.println("hello "+world);

    return "hello "+world;

}

//怎么处理对象

public User load(){

    User u = new User(1,"张三",new Group(1,"财务处"));

    return u;

}

 

public List<User> list(){

    List<User> users = new ArrayList<User>();

    users.add(new User(1,"张三",new Group(1,"财务处")));

    users.add(new User(2,"李四",new Group(2,"科技处")));

    users.add(new User(3,"王五",new Group(3,"宣传部")));

   

    System.out.println("已进入该方法");

    return users;

}

 

public void add(User user){

    System.out.println(user);

}

public void deleteUser(){

       throw new MyException("在删除用户的时候有错");

}

}

4、编写测试类:测试返回对象类型

Dwr01.jsp

<script type="text/javascript" src="/dwr-first/dwr/engine.js"></script>

    <script type="text/javascript" src="/dwr-first/dwr/util.js"> </script>

    <script type="text/javascript" src="/dwr-first/dwr/interface/MyDwr.js"></script>

    <script type="text/javascript">

       MyDwr.load(loadUser);

       function loadUser(user){

           alert(user.id+","+user.username+","+user.group.id+","+user.group.name);

       }

</script>

要想在js中调用返回对象(load方法)的方法,则需在dwr.xml中设置该类的转换器,因为间接地访问了group类的属性所以也许转换Group类

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

           <param name="class" value="org.konghao.dwr.model.MyDwr" />

        </create>

        <convert converter="bean" match="org.konghao.dwr.model.User"/>

     <convert converter="bean" match="org.konghao.dwr.model.Group"/>

 

编写测试类:测试返回List集合类型

Dwr02.jsp

MyDwr.list(listUser);

       function listUser(users){

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

              alert(users[i].username +","+users[i].group.name );

           }

}

可以再上面的基础上无需改动dwr.xml文件的内容(即返回集合与返回集合中的单个元素dwr.xml配置方式是一样的)。

 

编写测试类 :传入对象类型的参数

<script type="text/javascript" src="/dwr-first/dwr/engine.js"></script>

    <script type="text/javascript" src="/dwr-first/dwr/util.js"> </script>

    <script type="text/javascript" src="/dwr-first/dwr/interface/MyDwr.js"></script>

    <script type="text/javascript">

       var user = {id:1,username:"李四" ,group:{id:2,name:"网络中心"}};

       MyDwr.add(user);

</script>

 

由代码可以知道,在browser中构造的是一个json对象进行传值的

需转换两个类,dwr.xml的配置同上

 

编写测试:dwr对异常的处理

 

在用dwr来处理异常的时候通常转换两个类java.lang.Exception 和java.lang.StackTraceElement

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

 

<convert converter="bean" match="java.lang.StackTraceElement"/>

//MyDwr.deleteUser(

       //  function(data){

       //     alert(data);

       //  }

       //);

页面弹出对话框中的内容是“在删除用户的时候有错”

 

如果没有设置

//MyDwr.deleteUser(

       //  function(data){

       //     alert(data);

       //  }

       //);

页面弹出对话框中的内容是Error

为什么会得到Error呢?

因为未配置任何异常处理的时候他使用这样一个json,里面有个属性叫message,他会自动输出message的内容Error

{

    javaClassName:’java.lang.Throwable”,

    message:’Error’

}

在dwr.xml中两个异常类经过转换之后异常发生时可以得到异常的具体信息:

通过原始局的方式来操作

<script type="text/javascript" src="/dwr-first/dwr/engine.js"></script>

    <script type="text/javascript" src="/dwr-first/dwr/util.js"> </script>

    <script type="text/javascript" src="/dwr-first/dwr/interface/MyDwr.js"></script>

    <script type="text/javascript">

MyDwr.delete ({

           callback:deleteUser,

           errorHandler:function(msg,exception){ 

//参数分别是异常的错误消息 ,异常对象

              alert(msg);

              alert(exception.javaClassName);

              for(var ea in exception){

                  alert(ea);//对话框弹出的是exception对象当中的属性

              }

              alert(dwr.util.toDescriptiveString(exception,2));

              //打印的是对象的描述性字符串

           }

       });

function deleteUser(data){

          

       }

</script>