Dwr框架在客戶端遠程調用方法返回自定義類型的例子

          Posted on 2008-08-23 01:19 H2O 閱讀(2296) 評論(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

          主站蜘蛛池模板: 云林县| 尖扎县| 稻城县| 东莞市| 中宁县| 宁都县| 清水河县| 凤山市| 从化市| 朝阳区| 新密市| 临潭县| 兰考县| 永顺县| 富宁县| 错那县| 祥云县| 高陵县| 屏东市| 绥江县| 通山县| 罗定市| 永丰县| 馆陶县| 台东县| 汝州市| 朝阳市| 息烽县| 大姚县| 阿拉善左旗| 越西县| 梅河口市| 麻阳| 西峡县| 贵南县| 平谷区| 张家港市| 宜宾县| 波密县| 叶城县| 吉林市|