`
ljjr13
  • 浏览: 21773 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
文章分类
社区版块
存档分类
最新评论

DWR中 DWRUtil.addRows() 方法详解

阅读更多

 始终在DWR 门口转悠,扰于资源的限制,每次做东西都是用到DWR才遍地翻找资料,这次被个table中增加行的问题弄得是头破血还是没流, 找到一篇比较好的资料,以作收藏,亦便利了大家

 

本篇就是以例子详细说明这个函数的用法。而另一个移除所有表格行的操作 DWRUtil.removeAllRows() 使用简单就不多说明了。

  开始的时候我们还是要对这个函数的原型加以说明,虽然有些俗套,但还是必要的:

DWRUtil.addRows(id, array, cellfuncs, [options]);

  描述:

  向指定id的table元素添加行。它使用数组中的每一个元素(对象)在table中创建一行。然后用 cellfuncs 数组中的对应的函数创建一个列。单元格是依次用 cellfunc 根据没有数组中的元素创建出来的。

  DWR1.1开始,addRows()也可以用对象(遍历对象的属性创建行)做为数据。如果你用一个对象代替一个数组来创建单元格,这个对象会被传递给cell函数。

  参数(前三个函数 id, array, cellfuncs 是必须的):

  id: table元素的id(最好是tbody元素的id)

  array: 数组(DWR1.1以后可以是对象,这种用法会有代码说明),做为更新表格数据。

  cellfuncs: 函数数组,从传递过来的行数据中提取单元格数据。每个函数对应于一列

  options: 一个包含选项的对象(见下面)

  选项包括:

  rowCreator: 一个用来创建行的函数(例如,你希望个tr加个css). 默认是返回一个document.createElement("tr")

  cellCreator: 一个用来创建单元格的函数(例如,用th代替td). 默认返回一个document.createElement("td")

  escapeHtml: true 或 false,设定是忽略创建列时 cellfunc 函数中返回的 HTML 代码,默认为 true

  现在来看个最常用的例子,两列的表格,代码中用到的 util.js 文件可以直接从 dwr.jar 中的 uk/ltd/getahead/dwr(1.x) 或 org/directwebremoting(2.x 及上) 目录中取得:

页面元素的代码如下,我们用 id="listTable" 标记了一个表格的 <tbody> 我们以后的 js 操作都是基于这个表格的。

 

<script type='text/javascript' src='util.js'></script> 
<table border=1 width="200"> 
    <tr><th>ID</th><th>Name</th></tr> 
    <tbody id="listTable"></tbody> 
</table> 
<script type='text/javascript' src='util.js'></script>
<table border=1 width="200">
 <tr><th>ID</th><th>Name</th></tr>
 <tbody id="listTable"></tbody>
</table>

  JS 操作代码,你可以把这段对 DWRUtil.addRows() 函数的调用放在自定义的 function window.onload(){......} 中就能在文档加载完后自动调用。

 

//页面加载完后自动执行  
function window.onload(){  
     var arr = [{id:'1',name:'Unmi'},{id:2,name:'Kypfos'}]; //定义一个含有两个对象的数组  
     DWRUtil.addRows("listTable",arr,[  
           //创建第一列的函数,传入 arr 中的对象,返回单元格内容, 即 id 值  
           function(item){return item.id;},   
 
           //创建第二列的函数,传入 arr 中的对象,返回单元格内容, 即 name 值  
           function(item){return item.name;}  
         ]  
     );  
} 
//页面加载完后自动执行
function window.onload(){
     var arr = [{id:'1',name:'Unmi'},{id:2,name:'Kypfos'}]; //定义一个含有两个对象的数组
     DWRUtil.addRows("listTable",arr,[
        //创建第一列的函数,传入 arr 中的对象,返回单元格内容, 即 id 值
           function(item){return item.id;},

     //创建第二列的函数,传入 arr 中的对象,返回单元格内容, 即 name 值
     function(item){return item.name;}
         ]
     );
}

说明:

  要添加的行数由第二个数组参数 arr 的元素个数(arr.lengh) 决定的。如果第二个参数为一个对象,则该对象的每个属性对应一行。

  每行要创建多少列是由第三个参数 cellfuncs 中的函数个数决定的。所以上面代码中的 cellfuncs 函数数组中可以是一个函数,也可以是三个甚至更多,只是显示出来对不齐的。只要记住这些函数的参数是 arr 中的元素,且 cellfuncs 不能为空。

  如果 arr 是个普通的数组,addRows() 会遍历每一个数据元素:

 

var arr = ['Unmi','Kypfos'}]; //定义一个含有两个字符串的数组  
DWRUtil.addRows("listTable",arr,[  
      //创建第一列的函数,传入 arr 中的字符串,返回单元格内容, 即参数  
      function(item){return item;},   
 
      //创建第二列的函数,传入 arr 中的字符串,返回单元格内容, 即参数  
      function(item){return item;}  
    ]  
); 
     var arr = ['Unmi','Kypfos'}]; //定义一个含有两个字符串的数组
     DWRUtil.addRows("listTable",arr,[
           //创建第一列的函数,传入 arr 中的字符串,返回单元格内容, 即参数
           function(item){return item;},

           //创建第二列的函数,传入 arr 中的字符串,返回单元格内容, 即参数
           function(item){return item;}
         ]
     );

var obj = {line1:'1,Unmi',line2:'2,Kypfos'}; //定义一个对象,两属性 line1 和 line2  
DWRUtil.addRows("listTable",obj,[  
      //创建第一列的函数,传入 arr 中某个属性,返回单元格内容, 即逗号前部分  
      function(item){return item.split(',')[0]},   
 
      //创建第二列的函数,传入 arr 中某个属性,返回单元格内容, 即逗号后部分  
      function(item){return item.split(',')[1];}  
    ]  
); 
     var obj = {line1:'1,Unmi',line2:'2,Kypfos'}; //定义一个对象,两属性 line1 和 line2
     DWRUtil.addRows("listTable",obj,[
           //创建第一列的函数,传入 arr 中某个属性,返回单元格内容, 即逗号前部分
           function(item){return item.split(',')[0]},

           //创建第二列的函数,传入 arr 中某个属性,返回单元格内容, 即逗号后部分
           function(item){return item.split(',')[1];}
         ]
     );

  说明:

  可以看到,要添加的行数由第二个对象参数 obj 的属性个数(for(i in obj))决定的。

  创建行时传入到 cellfuncs 函数数组中函数的参数是当前遍历的对象 obj 的属性,如上面第一遍是 line1 属性,然而是 line2 属性。cellfuncs 中函数的个数也是不一定的,但不能为空。

  如果要在某列显示一个 HTML 元素,比如一个链接,我们可以这样写某个列的创建函数。我们第一个例子的基础上修改 cellfuncs 参数中的第二个函数如下:

 

 

 

var arr = [{id:'1',name:'Unmi'},{id:2,name:'Kypfos'}]; //定义一个含有两个对象的数组  
DWRUtil.addRows("listTable",arr,[  
      //创建第一列的函数,传入 arr 中的对象,返回单元格内容,即 id 值  
      function(item){return item.id;},   
 
      //创建第二列的函数,传入 arr 中的对象,显示 name,并在 name 上加上一个连接  
      function(item){  
         var hLink = document.createElement("a");  
         hLink.setAttribute("href","show.do?id="+item.id);  
         hLink.innerHTML=item.name;  
         return hLink;  
      }  
    ]  
); 
     var arr = [{id:'1',name:'Unmi'},{id:2,name:'Kypfos'}]; //定义一个含有两个对象的数组
     DWRUtil.addRows("listTable",arr,[
           //创建第一列的函数,传入 arr 中的对象,返回单元格内容,即 id 值
           function(item){return item.id;},

           //创建第二列的函数,传入 arr 中的对象,显示 name,并在 name 上加上一个连接
           function(item){
              var hLink = document.createElement("a");
              hLink.setAttribute("href","show.do?id="+item.id);
              hLink.innerHTML=item.name;
              return hLink;
           }
         ]
     );

简单点想,我们为什么不能在这个函数中直接返回 "<a href='show.do?id="+item.id+"'>"+item.name+"</a>" 这么一段 HTML 代码吗?这个想法不错,只是默认情况下,它会把 <a href='show.do?id=1'>Unmi</a> 字符串原样的显示在页面上,而不个链接。所以要引入 DWRUtil.addRows() 的可选的第四个参数中的一个属性 escapeHtml,把它设置为 false 就能显示超链接了。

  还是在第一个例子的情况下,我们把 DWRUtil.addRows() 函数的调用代码改写成如下:

 

var arr = [{id:'1',name:'Unmi'},{id:2,name:'Kypfos'}]; //定义一个含有两个对象的数组  
DWRUtil.addRows("listTable",arr,[  
      //创建第一列的函数,传入 arr 中的对象,返回单元格内容,即 id 值  
      function(item){return item.id;},   
 
      //创建第二列的函数,传入 arr 中的对象,显示 name,并在 name 上加上一个连接  
      function(item){  
        return "<a href='show.do?id="+item.id+"'>"+item.name+"</a>";  
      }  
    ],{escapeHtml:false}  
); 
     var arr = [{id:'1',name:'Unmi'},{id:2,name:'Kypfos'}]; //定义一个含有两个对象的数组
     DWRUtil.addRows("listTable",arr,[
           //创建第一列的函数,传入 arr 中的对象,返回单元格内容,即 id 值
           function(item){return item.id;},

           //创建第二列的函数,传入 arr 中的对象,显示 name,并在 name 上加上一个连接
           function(item){
             return "<a href='show.do?id="+item.id+"'>"+item.name+"</a>";
           }
         ],{escapeHtml:false}
     );

 

到此为止,DWRUtil.addRows() 中的四个参数都用到了,具体的第四个参数 [options] 中还有两个函数属性 rowCreator 和 cellCreator 未涉及到。这两个属性分别是用来创建行(tr) 和单元格(td) 的,所以它们的默认行为分别是

  return document.createElement("tr");  和 return document.createElement("td");

  我们定制这两个创建函数可以对创建的行与单元格用样式来润色,或者在其中附着上事件。看如下的代码:

 

var arr = [{id:'1',name:'Unmi'},{id:2,name:'Kypfos'},{id:3,name:'Fantaisa'}];  
DWRUtil.addRows("listTable",arr,[  
      function(item){return item.id;},   
      function(item){return item.name;}  
    ],{  
        rowCreator:function(options) { //自定义 tr 的创建行为  
            var row = document.createElement("tr");   
            row.style.backgroundColor = "rgb(" + (options.rowIndex * 50) + ",100,100)";   
            return row;   
        },   
        cellCreator:function(options) { //自定义 td 的创建行为  
            var td = document.createElement("td");   
            td.style.fontWeight = "bold";   
            return td;   
        }   
      }  
); 
     var arr = [{id:'1',name:'Unmi'},{id:2,name:'Kypfos'},{id:3,name:'Fantaisa'}];
     DWRUtil.addRows("listTable",arr,[
           function(item){return item.id;},
           function(item){return item.name;}
         ],{
             rowCreator:function(options) { //自定义 tr 的创建行为
                 var row = document.createElement("tr");
                 row.style.backgroundColor = "rgb(" + (options.rowIndex * 50) + ",100,100)";
                 return row;
             },
             cellCreator:function(options) { //自定义 td 的创建行为
                 var td = document.createElement("td");
                 td.style.fontWeight = "bold";
                 return td;
             }
           }
     );

 

 

  上面两个函数 rowCreator 和 cellCreator 需传入一个对象参数,这个参数有七个属性,分别是 rowCreator cellCreator rowData rowIndex rowNum data cellNum。

  

 一曲终了!

分享到:
评论

相关推荐

    DWRUtil.rar_DWRUtil_dwr

    2. **数据填充**:在处理表格和其他HTML结构时,DWRUtil提供了便利的方法,如`DWRUtil.populate`可以将服务器返回的数据填充到HTML元素中,`DWRUtil.addRows`可以向表格添加新行。 3. **事件处理**:DWRUtil简化了...

    DWR小结DWRUtil篇

    DWRUtil.$()方法是DWRUtil中最基本的方法,用于获取HTML元素。它相当于JavaScript中的document.getElementById()方法,参数可以是元素的id或name属性值。例如: ```html var ele = DWRUtil.$("txt_test"); var ...

    dwr包.rar dwr.jar engine.js util.js dwr-noncla.jar readme.txt

    dwr包.rar dwr.jar engine.js util.js dwr-noncla.jar readme.txt JAR File: dwr.jar (1.08Mb) To DWR enable your web-app WAR File: dwr.war (4.62Mb) Demos/Examples of what DWR can do Sources: dwr-...

    dwr js包 DwrEngine.js+DwrUtil.js

    标题中的"DwrEngine.js"和"DwrUtil.js"是DWR的核心JavaScript库文件。`DwrEngine.js`提供了与服务器通信的主要接口,实现了AJAX调用的底层逻辑,包括异步请求的发送、响应的处理以及错误管理等。`DwrUtil.js`则是...

    dwrUtil用法--更好的开发Ajax

    - `DWRUtil.addRows(id, array, cellfuncs, [options])`:向表格(指定id的table)中添加行,`array`是数据源,`cellfuncs`是处理每行数据的函数数组。例如,`DWRUtil.addRows('addRowsBasic', arrayFive, ...

    dwrUtil用法

    在 DWR 中,`dwrUtil` 是一个非常重要的工具类,提供了许多实用的方法来操作 DOM 元素以及处理数据传输等任务。本文将详细介绍 `dwrUtil` 的几个核心方法及其应用场景。 #### 二、详细解析 ##### 1. `$()` - **...

    DWR util.js学习笔记.doc

    addRows 函数用于添加行到表格中,removeAllRows 函数用于清空表格中的行。 4. getText 函数:获取文本属性值 该函数用于获取文本属性值,例如:DWRUtil.getText("demo");获取名为“demo”的文本属性值。 5. ...

    DWRUtil 小结

    DWRUtil是DWR框架中的一个工具类库,提供了一系列用于操作DOM元素、处理表单数据等功能的方法,极大地提高了Web应用的开发效率。 ### DWRUtil的主要功能方法 #### 1. DWRUtil.toDescriptiveString 该方法可以将DOM...

    DWR util.js 学习笔记 整理

    DWRUtil 中的 $() 函数用于获取页面参数值,它可以代替 document.getElementById 函数,但需要注意的是,在 IE5.0 中不支持该函数。例如, var name = $("name"); 可以获取名为 "name" 的表单元素的值。 2. ...

    DWR (api)帮助文档

    4. `DWRUtil.addRows()` 方法用于向表格中动态添加行。例如: - `DWRUtil.addRows('addRowsBasic', arrayFive, [function(data) { return data; },function(data) { return data.toUpperCase(); },function(data) {...

    dwr-3.0.jar

    最新dwr3.0的包,有需要的朋友就下载吧

    dwr2.0.5.jar&dwr2.0.6.jar&dwr3.rc1.jar

    部署DWR JAR文件通常涉及到将它们添加到Web应用的类路径中,配置DWR的`dwr.xml`配置文件,以及在客户端HTML页面中引入相应的JavaScript库。对于Spring框架的集成,还需要配置Spring的bean定义。 总的来说,DWR的...

    DWRUtils高级使用帮助

    在示例中,`DWRUtil.addRows("tby_test", arr_, [function(arr_) {return arr_}])`将向id为"tby_test"的tbody中添加数组`arr_`中的每一项作为新的行。 这些函数使得开发者可以更方便地在客户端处理DOM元素和数据,...

    dwr.jar dwrUtil常见方法 dwr详细资料

    标题“dwr.jar dwrUtil常见方法 dwr详细资料”指出,我们关注的核心是“dwr.jar”,这是一个包含Direct Web Remoting (DWR)框架核心库的Java档案文件。DWR是一种使Web应用程序能够执行服务器端JavaScript的方法,...

    DWR addOptions()填充下拉框,addRows()填充表格

    DWRUtil.addRows("dataTableId", [ { "col1": "Value 1", "col2": "Value 2", "col3": "Value 3" }, { "col1": "Value 4", "col2": "Value 5", "col3": "Value 6" } ]); ``` 在这个例子中,`"dataTableId"` 是...

    DWR,web.xml,dwr.xml,converted,created

    取得dwr的dwr.jar包和其他dwr所需的其他jar包 web.xml dwr.xml 任何一个dwr.xml的文件都需要包含DWR DOCTYPE的声明行,。。 有几个术语有必要理解,参数叫做converted,远程Bean叫做created.如果远程Bean A有个方法A....

    dwr-1.1.1.jar

    dwr-1.1.1.jar

    DWR中文文档.pdfDWR中文文档.pdf

    1. **DWR基本概念**:DWR的核心是远程方法调用(Remote Method Invocation,RMI),它允许JavaScript在浏览器中直接调用服务器上的Java方法。这种技术被称为Ajax(Asynchronous JavaScript and XML),但DWR不仅限于...

    dwr-1.13.jar及dwr.xml

    dwr-1.1.3.jar及dwr.xml. dwr-1.1.3与dwr-2.0的dwr.xml略有区别: dwr-1.1.3 &lt;!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" ...

    spring-dwr-2.0.xsd

    spring-dwr-2.0.xsd spring 与 DWR进行配置

Global site tag (gtag.js) - Google Analytics