`

DWR对象构造,深入分析dwr中的DWRUtil.getValues

    博客分类:
  • Ajax
阅读更多

 

当你需要通过dwr完成类似提交form的操作,了解DWRUtil.getValues是必须的

/**
 * Given a map, call getValue() for all the entries in the map using the entry key as an element id.
 * Given a string or element that refers to a form, create an object from the elements of the form.
 * @see http://getahead.ltd.uk/dwr/browser/util/getvalues
 */
DWRUtil.getValues = function(data) {

  //定义ele变量,
  var ele;
//如果ele是一个字符串通过 $函数转化一下,$函数的使用见我的上个帖子深入分析dwr中的DWRUtil.$
  if (typeof data == "string") ele = $(data);
//如果ele是个HTML元素对象,通常应该是一个form对象
  if (DWRUtil._isHTMLElement(data)) ele = data;
 
 if (ele != null) {
    //如果ele不是form对象,返回,只有form对象才有elements 属性
    if (ele.elements == null) {
      alert("getValues() requires an object or reference to a form element.");
      return null;
    }
    //定义一个空对象reply
    var reply = {};
    //定义一个对象放key
    var value;
    //遍历form,将表单key-value放入reply,忽略<input type="image"/>
    for (var i = 0; i < ele.elements.length; i++) {
      if (ele[i].id != null) value = ele[i].id;
      else if (ele[i].value != null) value = ele[i].value;
      else value = "element" + i;
      reply[value] = DWRUtil.getValue(ele[i]);
    }
    return reply;
  }

//如果传入的参数对象不是表单对象,通常应该是与领域对象对应js对象
  else {
    //遍历对象属性,将与属性对应的页面元素值拷到js对象中
    for (var property in data) {
      // Are there any elements with that id or name
      if ($(property) != null || document.getElementsByName(property).length >= 1) {
        data[property] = DWRUtil.getValue(property);
      }
    }
    return data;
  }
};

 总结
1)如果你需要使用ajax完成表单提交的操作,那么你应该使用DWRUtil.getValues,参数或者是个form对象,或者是个与领域对象对应的js对象
2)应该看到第二种用法的局限性,如果存在多个相同的表单或者是个复合的js对象,那么第二种用法是不合适的
3)第一种用法看似复杂,但更具灵活性
到底改如何选择取决于具体的应用
====================================================
 背景:需要使用ajax完成表单提交操作

核心代码如下:

function addReply(frm){

//利用dwr自动将frm提交的数据植入js对象,

//DWRUtil.getValues的使用见我的上篇帖子

var commentForm = DWRUtil.getValues(frm);

//调用服务器端的服务

CommentService.writeComment(writecallback,commentForm );
//....
}

注意以下几点

1 )传给服务的 js 对象最好严格与领域对象对应不能有key为""的属性否则会报错,可以有多余  的属性,但后台会出现一些烦人日志信息告诉你无法匹配

 

2)对于领域对象来说,dwr在转换时会遍历所有get方法(根据传入的js对象属性进行反射不就好了, 为什么要遍历get方法,真是奇怪啊 ),所以注意你的get方法要健壮避免后台会出很多日志信息汇报空指针之类的错误

 

3)关于本地传递的js对象,必须结构与领域对象对应。从抽象的角度看多数情况领域对象完   全可以用数组和hash结构描述,何况所谓的对应只是属性的对应,所以合理的使用Array和Object完全可以实现js对象和领域对象的匹配

 

4 )必须配置合适的转化器 dwr 知道如何将你传入的 js 对象转化为领域对象

 

5 )使用DWRUtil.getValues(frm)或者DWRUtil.getValues( obj )收集提交的数据

分享到:
评论

相关推荐

    DWRUtil.rar_DWRUtil_dwr

    1. **对象和数组操作**:DWRUtil提供了对JavaScript对象和数组的操作方法,如`DWRUtil.getValue`用于获取表单元素的值,`DWRUtil.getValues`则可以获取一组元素的值,`DWRUtil.removeAllRows`用于清除表格的所有行。...

    dwr js包 DwrEngine.js+DwrUtil.js

    `DwrUtil.js`则是一些实用工具函数的集合,用于辅助DWR的使用,例如对象操作、数组处理、DOM操作等,它为开发者提供了一套方便的API,以提高开发效率。 在DWR 1.0和2.0这两个版本中,主要的改进和变化可能包括: 1...

    DWR小结DWRUtil篇

    DWRUtil是DWR(Direct Web Remoting)框架中一个非常重要的工具类,提供了一些实用的方法来操作HTML元素、处理数据和实现自动化任务。在本篇文章中,我们将详细介绍DWRUtil的各种方法和使用场景。 1. DWRUtil.$() ...

    DWR util.js学习笔记.doc

    下面是DWR util.js中的主要功能: 1. $()函数:获取页面参数值 该函数用于获取页面参数值,例如:var name = $("name");获取名为“name”的表单值。 2. addOptions 和 removeAllOptions 函数:初始化下拉框 ...

    DWRUtil 小结

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

    dwrUtil用法

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

    DWR util.js 学习笔记 整理

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

    DWR (api)帮助文档

    1. `DWRUtil` 是DWR提供的一个实用工具类,包含了多种用于操作DOM元素和数据的方法。例如: - `DWRUtil.selectRange("selectRangeBasic", 5, 15)`:此方法可以选中指定文本框中的特定字符范围,这里是从第五个字符...

    DWRUtils高级使用帮助

    在示例中,`DWRUtil.getValues({“txt_name”:null,”txt_pswd”:null})`将获取name分别为"txt_name"和"txt_pswd"的两个输入元素的value值,并将它们放入一个数组中。 4. `DWRUtil.setValue()`:此函数用于设置指定...

    dwrUtil用法--更好的开发Ajax

    Direct Web Remoting (DWR) 是一种用于在Web应用程序中实现AJAX功能的库,它允许JavaScript和服务器端Java代码之间进行交互。在提供的描述中,我们看到了几个DWRUtil工具类的一些用法,这个工具类提供了许多方便的...

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

    DWR (Direct Web Remoting) 是一种用于在Web应用程序中实现AJAX技术的Java库,它允许JavaScript与服务器端的Java代码进行交互,无需页面刷新即可更新部分网页内容。DWR简化了前后端数据交换的过程,提高了用户体验。...

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

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

    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-...

    ajax-DWR笔记.doc

    5. **`DWRUtil.getValues()`**:这个函数返回一个对象,其中包含了指定ID的元素值。例如,`div`、`textarea`、`select`、`text`、`password`、`formbutton`和`button`。在Java后端,这些值通常被解析为一个Map,便于...

    使用dwr的一点经验

    - **对象数组形式**:`DWRUtil.addOptions(selectId, data, prop)`,其中`data`为包含text和value的对象数组,`prop`指定如何映射text和value。 - **不同text和value的对象数组**:`DWRUtil.addOptions(selectId, ...

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

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

    dwr源码包,dwr.jar包下载

    1、 导入dwr.jar包 2、 在web.xml中配置dwr,如下: &lt;!-- 配置DWR --&gt; &lt;servlet-name&gt;dwr-invoker org.directwebremoting.servlet.DwrServlet &lt;init-param&gt; &lt;param-name&gt;debug&lt;/param-name&gt; ...

    DWR中文文档......

    - **dwr.xml**:这个文件用于描述DWR服务的配置,包括哪些类和方法可以被远程调用,以及如何处理这些调用的细节。例如,通过`&lt;allow&gt;`标签指定允许远程访问的类和方法,通过`&lt;converters&gt;`和`&lt;creators&gt;`标签指定...

    dwr-下拉菜单实现

    - 首先确保项目中已经正确配置了DWR环境,包括导入DWR相关的jar包、配置web.xml和dwr.xml等。 - 在前端页面中引入DWR的JavaScript库。 2. **编写服务器端逻辑** - 在服务器端编写一个返回列表数据的方法,该方法...

Global site tag (gtag.js) - Google Analytics