Dwr框架在客户端远程调用方法返回自定义类型的例子

Posted on 2008-08-23 01:19 H2O 阅读(2279) 评论(2)  编辑  收藏 所属分类: ajax
package com.yz.dwr;

/**
 * 用户
 * 
@author 小毅
 *
 
*/

public class Users {
    
private int uid;
    
private String uname;
    
private int sex;
    
private Dept dep;
    
public Users(int uid, String uname, int sex, Dept dep) {
        
super();
        
this.uid = uid;
        
this.uname = uname;
        
this.sex = sex;
        
this.dep = dep;
    }

    
public Users() {
    }

    
public int getUid() {
        
return uid;
    }

    
public void setUid(int uid) {
        
this.uid = uid;
    }

    
public String getUname() {
        
return uname;
    }

    
public void setUname(String uname) {
        
this.uname = uname;
    }

    
public int getSex() {
        
return sex;
    }

    
public void setSex(int sex) {
        
this.sex = sex;
    }

    
public Dept getDep() {
        
return dep;
    }

    
public void setDep(Dept dep) {
        
this.dep = dep;
    }

}

package com.yz.dwr;
import java.util.*;
import com.yz.dwr.*;

public class myControl {
    
//演示在客户端利用DWR框架获得自定义对象以及集合中的对象的相关属性值
    public List<Users> getAllUsers(){
        List
<Users> lst = new ArrayList<Users>();
        
//只是为了演示方便所以仅模仿从数据库获取数据获得数据
        for (int i = 1; i <= 10; i++{
            lst.add(
new Users(i,"xiaoyi"+i,i%2,new Dept(i+1,"部门"+i,"部门描述"+i)));
        }

        System.out.println(
"集合的大小为--->"+lst.size());
        
return lst;
    }

}
package com.yz.dwr;

/**
 * 部门
 * @小毅
 
*/

public class Dept {
    
private int deptId;
    
private String deptName;
    
private String description;
    
public Dept(int deptId, String deptName, String description) {
        
super();
        
this.deptId = deptId;
        
this.deptName = deptName;
        
this.description = description;
    }

    
public Dept() {
    }

    
public int getDeptId() {
        
return deptId;
    }

    
public void setDeptId(int deptId) {
        
this.deptId = deptId;
    }

    
public String getDeptName() {
        
return deptName;
    }

    
public void setDeptName(String deptName) {
        
this.deptName = deptName;
    }

    
public String getDescription() {
        
return description;
    }

    
public void setDescription(String description) {
        
this.description = description;
    }
    
}


dwr.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://www.getahead.ltd.uk/dwr/dwr20.dtd">
<dwr>
    
<allow>
        
<!--要判断后台是否已经写好,可以到测试也看一看  -->
        
<!-- 转换器:dwr框架根据转换器的配置自动转换成json对象
            bean 以javabean的方式转换 
            所有参数如下:
            自定义 Converters(转换)
            Bean/Object Converter
            Array/Collection Converter
            Dom Objects
            Enum Converter
        
-->
        
<convert converter="bean" match="com.yz.dwr.Dept">
            
<!-- 这里可以加参数,如果没有加就会把该类的所有属性转为json对象,如果
                加了参数表示只会转换value包含的属性值到json对象,要转换的各属性用逗号隔开
                <param name="include" value="uid,username"/>
            
-->
        
</convert>
        
<convert converter="bean" match="com.yz.dwr.Users"></convert>

        
<!-- javascript的对象是xiaoyi,create="new"是DWR通过new关键字创建value所对应的
            类的实例调用该类的方法 include表示只允许调用某些方法,exclude表示除了某方法之外其他
            的都不能调用 如果都没写表示所有公有方法都能调用
        
-->
        
<create creator="new" javascript="xiaoyi">
            
<param name="class" value="com.yz.dwr.myControl"></param>
        
</create>
    
</allow>
</dwr>

web.xml
    <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>
    
</servlet>
    
<servlet-mapping>
        
<servlet-name>dwr-invoker</servlet-name>
        
<url-pattern>/dwr/*</url-pattern>
    
</servlet-mapping>

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
    
String path = request.getContextPath();
    
String basePath = request.getScheme() + "://"
            
+ request.getServerName() + ":" + request.getServerPort()
            
+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    
<head>
        
<base href="<%=basePath%>">

        
<title>DWR框架操作自定义类型</title>
        
<meta http-equiv="pragma" content="no-cache">
        
<meta http-equiv="cache-control" content="no-cache">
        
<meta http-equiv="expires" content="0">
        
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        
<meta http-equiv="description" content="This is my page">
        
<!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    
-->
        
<script type='text/javascript' src='/dwrTest2/dwr/interface/xiaoyi.js'></script>
        
<script type='text/javascript' src='/dwrTest2/dwr/engine.js'></script>
        
<script type='text/javascript' src='/dwrTest2/dwr/util.js'></script>
        
<script type="text/javascript">
        
//objInList是远程调用方法返回的集合循环遍历的第i个对象
            var deptName = function (objInList){
                
//返回第i个对象(用户对象)的部门对象属性的部门名称
                return objInList.dep.deptName;
            }

            
function gets(){
                
//远程调用服务器的方法,并指定回调函数处理
                xiaoyi.getAllUsers(deals);
            }
;
            
function deals(rst){
                
//回调函数的参数为:远程调用的返回结果
                //dwr.util.addOptions("sl",rst,"uid","uname");
                dwr.util.addOptions("sl",rst,"uid",deptName);
                 
//给tbody添加数据肯定是一个集合,即d 但是不知道有多少列,所以用【这里面写几个就表示几个列 】 
                 dwr.util.addRows("tb",rst,["uid","uname",deptName]);
                
            }

        
</script>
    
</head>

    
<body>
        
<input type="button" value="添加内容" onclick="gets();">
        
<select id="sl"></select>
        
<table >
            
<tbody id="tb"></tbody>
        
</table>
    
</body>
</html>

Feedback

# re: Dwr框架在客户端远程调用方法返回自定义类型的例子[未登录]  回复  更多评论   

2008-11-27 09:52 by dragon

请教下,为什么我从hibernate里面拉出来的数据,返回前台时,第一项数据为空, 自定义类型中含有另一个自定义类型,就跟你写的Users中含有dept类型的属性,报错信息 s0 is not defined,使用firebug查看后台传到前数的数据.dwr.engine._remoteHandleCallback('0','0',[null,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10]);
麻烦兄弟指点下,谢谢

# re: Dwr框架在客户端远程调用方法返回自定义类型的例子  回复  更多评论   

2009-02-19 08:18 by fdwwh
这个例子很好!

只有注册用户登录后才能发表评论。


网站导航:
 

posts - 0, comments - 21, trackbacks - 0, articles - 101

Copyright © H2O