util.js 功能
util.js
包含了一些工具函数来帮助你用javascript数据(例如从服务器返回的数据)来更新你的web页面。
你可以在DWR以外使用它,因为它不依赖于DWR的其他部分。你可以下载整个DWR或者单独下载.
4个基本的操作页面的函数:getValue[s]()和setValue[s]()可以操作大部分HTML元素除了table,list和image。
getText()可以操作select list。
要修改table可以用addRows()和removeAllRows()。要修改列表(select列表和ul,ol列表)可以用
addOptions()和removeAllOptions()。
还有一些其他功能不是DWRUtil的一部分。但它们也很有用,它们可以用来解决一些小问题,但是它们不是对于所有任都通用的。
7.1 $()
$()
函数(它是合法的Javascript名字) 是从Protoype偷来的主意。 大略上的讲: $ =
document.getElementById。 因为在Ajax程序中,你会需要写很多这样的语句,所以使用 $() 会更简洁。
通过指定的id来查找当前HTML文档中的元素,如果传递给它多个参数,它会返回找到的元素的数组。所有非String类型的参数会被原封不动的返回。这
个函数的灵感来至于prototype库,但是它可以在更多的浏览器上运行。
可以看看DWRUtil.toDescriptiveString的演示。
从技术角度来讲他在IE5.0中是不能使用的,因为它使用了Array.push,尽管如此通常它只是用来同engine.js一起工作。如果你不想要
engine.js并且在IE5.0中使用,那么你最好为Array.push找个替代品。
7.2 addOptions and removeAllOptions
DWR
的一个常遇到的任务就是根据选项填充选择列表。下面的例子就是根据输入填充列表。 下面将介绍 DWRUtil.addOptions()
的几种是用方法。 如果你希望在你更新了select以后,它仍然保持运来的选择,你要像下面这样做: var sel =
DWRUtil.getValue(id); DWRUtil.removeAllOptions(id);
DWRUtil.addOptions(id, ...); DWRUtil.setValue(id, sel);
55 / 92
如果你想加入一个初始的"Please select..." 选项那么你可以直接加入下面的语句: DWRUtil.addOptions(id, \["Please select ..."]);
DWRUtil.addOptions有5种模式
数组: DWRUtil.addOptions(selectid, array) 会创建一堆option,每个option的文字和值都是数组元素中的值。
对象数组 (指定text): DWRUtil.addOptions(selectid, data, prop) 用每个数组元素创造一个option,option的值和文字都是在prop中指定的对象的属性。
对象数组 (指定text和value值): DWRUtil.addOptions(selectid, array, valueprop,
textprop)
用每个数组元素创造一个option,option的值是对象的valueprop属性,option的文字是对象的textprop属性。
对象: DWRUtil.addOptions(selectid, map,
reverse)用每个属性创建一个option。对象属性名用来作为option的值,对象属性值用来作为属性的文字,这听上去有些不对。但是事实上却
是正确的方式。如果reverse参数被设置为true,那么对象属性值用来作为选项的值。
对象的Map:
DWRUtil.addOptions(selectid, map, valueprop, textprop)
用map中的每一个对象创建一个option。用对象的valueprop属性做为option的value,用对象的textprop属性做为
option的文字。
ol 或 ul 列表: DWRUtil.addOptions(ulid, array) 用数组中的元素创建一堆li元素,他们的innerHTML是数组元素中的值。这种模式可以用来创建ul和ol列表。
这是网上的例子
7.3 addRows and removeAllRows
DWR通过这两
个函数来帮你操作table: DWRUtil.addRows() 和 DWRUtil.removeAllRows()
。这个函数的第一个参数都是table、tbody、thead、tfoot的id。一般来说最好使用tbody,因为这样可以保持你的header和
footer行不变,并且可以防止Internet Explorer的bug。
DWRUtil.removeAllRows()
DWRUtil.removeAllRows(id);
描述: 通过id删除table中所有行。 参数: id: table元素的id(最好是tbody元素的id)
DWRUtil.addRows()
DWRUtil.addRows(id, array, cellfuncs, [options]);
描
述:
向指定id的table元素添加行。它使用数组中的每一个元素在table中创建一行。然后用cellfuncs数组中的没有函数创建一个列。单元格是依
次用cellfunc根据没有数组中的元素创建出来的。
DWR1.1开始,addRows()也可以用对象做为数据。如果你用一个对象代替一个数组来创建单元格,这个对象会被传递给cell函数。 参数:
id: table元素的id(最好是tbody元素的id) array: 数组(DWR1.1以后可以是对象),做为更新表格数据。
cellfuncs: 函数数组,从传递过来的行数据中提取单元格数据。 options: 一个包含选项的对象(见下面) 选项包括:
rowCreator: 一个用来创建行的函数(例如,你希望个tr加个css).
默认是返回一个document.createElement("tr") cellCreator:
一个用来创建单元格的函数(例如,用th代替td). 默认返回一个document.createElement("td")
这是网上的例子
7.4 getText
getText(id)和getValue(id)很相似。出了它是为select列表设计的。你可能需要取得显示的文字,而不是当前选项的值。
这是网上的例子
7.5 getValue
DWRUtil.getValue(id)
是 setValue()对应的"读版本"。它可以从HTML元素中取出其中的值,而你不用管这个元素是select列表还是一个div。
这个函数能操作大多数HTML元素包括select(去处当前选项的值而不是文字)、input元素(包括textarea)、div和span。
这是网上的例子
7.6 getValues
getValues()和getValue()非常相似,除了输入的是包含name/value对的
javascript对象。name是HTML元素的ID,value会被更改为这些ID对象元素的内容。这个函数不会返回对象,它只更改传递给它的值。
从DWR1.1开始getValues()可以传入一个HTML元素(一个DOM对象或者id字符串),然后从它生成一个reply对象。
这是网上的例子
7.7 onReturn
当
按下return键时,得到通知。
当表单中有input元素,触发return键会导致表单被提交。当使用Ajax时,这往往不是你想要的。而通常你需要的触发一些Javscript。
不幸的是不同的浏览器处理这个事件的方式不一样。所以DWRUtil.onReturn修复了这个差异。如果你需要一个同表单元素中按回车相同的特性,你
可以用这样代码实现: <input type="text"
onkeypress="DWRUtil.onReturn(event,submitFunction)"/> <input
type="button" onclick="submitFunction()"/>
你也可以使用onkeypress事件或者
onkeydown事件,他们做同样的事情。
一般来说DWR不是一个Javascript类库,所以它应该试图满足这个需求。不管怎样,这是在使用Ajax过程中一个很有用函数。
这个函数的工作原理是onSubmit()事件只存在于<FORM ...>元素上
这是网上的例子
7.8 selectRange
选
择一个输入框中的一定范围的文字。 你可能为了实现类似"Google
suggest"类型的功能而需要选择输入框中的一定范围的文字,但是不同浏览器间选择的模型不一样。这DWRUtil函数可以帮你实现。
DWRUtil.selectRange(ele, start, end)
这是网上的例子
7.9 setValue
DWRUtil.setValue(id,
value)根据第一个参数中指定的id找到相应元素,并根据第二个参数改变其中的值。
这个函数能操作大多数HTML元素包括select(去处当前选项的值而不是文字)、input元素(包括textarea)、div和span。
这是网上的例子
7.10 setValues
setValues()和setValue()非常相似,除了输入的是包含name/value对的javascript对象。name是HTML元素的ID,value是你想要设置给相应的元素的值。
这是网上的例子
7.11 toDescriptiveString
DWRUtil.toDescriptiveString()
函数比默认的toString()更好。第一个参数是要调试的对象,第二个参数是可选的,用来指定内容深入的层次: 0: 单行调试 1:
多行调试,但不深入到子对象。 2: 多行调试,深入到第二层子对象 以此类推。一般调试到第二级是最佳的。
还有第三个参数,定义初始缩进。这个函数不应该被用于调式程序之外,因为以后可能会有变化。
这是网上的例子
7.12 useLoadingMessage
这
个方法将来可能被废弃,因为这个实现实在太专断了。为什么是红色,为什么在右上角,等等。唯一的真正答案就是:抄袭GMail。这里的建议是以本页面中的
代码为模板,根据你的需求自定义。
你必须在页面加载以后调用这个方法(例如,不要在onload()事件触发之前调用),因为它要创建一个隐藏的div来容纳消息。
最简单的做法时在onload事件中调用DWRUtil.useLoadingMessage,像这样: <head>
<script> function init() { DWRUtil.useLoadingMessage(); }
</script> ... </head> <body onload="init();"> ...
可
能有些情况下你是不能容易的编辑header和body标签(如果你在使用CMS,这很正常),在这样的情况下你可以这样做:
<script> function init() { DWRUtil.useLoadingMessage(); } if
(window.addEventListener) { window.addEventListener("load", init,
false); } else if (window.attachEvent) { window.attachEvent("onload",
init); } else { window.onload = init; } </script>
下面这些是这个函数的代码,
它对于你要实现自己的加载消息很有用。这个函数的主要内容是动态创建一个div(id是disabledZone)来容纳消息。重要的代码是当远程调用时
使它显示和隐藏: DWREngine.setPreHook(function() {
$('disabledZone').style.visibility = 'visible'; });
DWREngine.setPostHook(function() { $('disabledZone').style.visibility =
'hidden'; }); This is fairly simple and makes it quite easy to
implement your own "loading" message.
function useLoadingImage(imageSrc) { var loadingImage; if (imageSrc)
loadingImage = imageSrc; else loadingImage = "ajax-loader.gif";
DWREngine.setPreHook(function() { var disabledImageZone =
$('disabledImageZone'); if (!disabledImageZone) { disabledImageZone =
document.createElement('div'); disabledImageZone.setAttribute('id',
'disabledImageZone'); disabledImageZone.style.position = "absolute";
disabledImageZone.style.zIndex = "1000"; disabledImageZone.style.left =
"0px"; disabledImageZone.style.top = "0px";
disabledImageZone.style.width = "100%"; disabledImageZone.style.height
= "100%"; var imageZone = document.createElement('img');
imageZone.setAttribute('id','imageZone');
imageZone.setAttribute('src',imageSrc); imageZone.style.position =
"absolute"; imageZone.style.top = "0px"; imageZone.style.right = "0px";
disabledImageZone.appendChild(imageZone);
document.body.appendChild(disabledImageZone); } else {
$('imageZone').src = imageSrc; disabledImageZone.style.visibility =
'visible'; } }); DWREngine.setPostHook(function() {
$('disabledImageZone').style.visibility = 'hidden'; }); }
然后你就可以这样使用:useLoadingImage("images/loader.gif");
7.13 Submission box
h1 非util.js中的功能 这里有一些功能不适合加入到DWRUtil中。它们在解决一下特殊问题是很有用,但是他们还不够通用以适用任何场合。
62 / 92
修
补浏览器事件
如果你创建了一个DOM元素,然后用addAttribute在这个元素上创建了一个事件,那么他们不能被正常的触发。你可以使用下面的脚本来遍历一个
DOM树,并重新为他们绑定事件,这样他们就能正常的触发了。 把'click'改成你希望的事件。
DWREngine._fixExplorerEvents = function(obj) { for (var i = 0; i <
obj.childNodes.length; i++) { var childObj = obj.childNodes [i]; if
(childObj.nodeValue == null) { var onclickHandler =
childObj.getAttribute('onclick'); if (onclickHandler != null) {
childObj.removeAttribute('onclick'); // If using prototype: //
Event.observe(childObj, 'click', new Function(onclickHandler)); //
Otherwise (but watch out for memory leaks): if (element.attachEvent) {
element.attachEvent("onclick", onclickHandler); } else {
element.addEventListener("click", onclickHandler, useCapture); } }
DWREngine._fixExplorerEvents(childObj); } }
原文:http://i.mop.com/gabriel80/blog/2008/01/10/6075039.html
相关推荐
此外,标题还提到了“dwrUtil”,这是DWR框架中的一个实用工具类,包含了多种常用的方法,便于开发者进行日常的交互操作。最后,"dwr详细资料"表明我们将深入探讨DWR的相关知识。 **描述解析:** 描述“详细资料 ...
DWRUtil是DWR(Direct Web Remoting)框架中一个非常重要的工具类,提供了一些实用的方法来操作HTML元素、处理数据和实现自动化任务。在本篇文章中,我们将详细介绍DWRUtil的各种方法和使用场景。 1. DWRUtil.$() ...
这个压缩包文件包含了DWR框架所需的依赖包以及可能的示例代码,帮助开发者快速理解和使用DWR。 在使用DWR框架时,有几个关键知识点是必须掌握的: 1. **DWR的基本概念**: - **AJAX(Asynchronous JavaScript and...
DWRUtil是DWR框架中的一个实用工具类,提供了一系列方便开发者使用的函数,简化了JavaScript和服务器端数据交互的过程。这个压缩包"DWRUtil.rar"包含了"DWRUtil_dwr"相关的文件,特别是"DWRUtil.txt",这可能是一个...
1. **远程方法调用(Remote Method Invocation, RMI)**:DWR的核心特性是支持JavaScript直接调用服务器上的Java方法,就像调用本地函数一样。这使得开发者能够构建更富交互性的用户界面,因为可以在不刷新整个页面...
DWR (Direct Web Remoting) 是一个开源的Java框架,用于在...通过上述介绍,我们可以看到DWR框架如何简化AJAX开发,以及如何在实际项目中应用。了解并熟练掌握这些知识点,将有助于你构建更加高效、易于维护的Web应用。
在本主题中,“dwr框架实现下拉框的连动”涉及到的是如何使用DWR来实现在网页中两个或多个下拉框之间的联动效果,即当用户在一个下拉框中选择一个选项时,另一个下拉框的内容会根据所选选项自动更新。 一、DWR框架...
下面将详细探讨DWR框架的相关知识点。 一、DWR的基本概念和原理 DWR的核心思想是通过JavaScript Remoting技术,在客户端和服务器之间建立直接通信的桥梁。它使用HTTP协议,绕过传统的HTTP请求-响应模型,让...
在标题和描述中,我们看到了几个关键知识点,包括DWR框架、中文文档、无刷新分页、表单处理以及Java方法的调用。 1. **DWR框架**:DWR的核心功能是实现AJAX(Asynchronous JavaScript and XML)通信。它通过在...
DWR(Direct Web Remoting)框架是一个开源的Java库,它允许在Web应用程序中实现JavaScript与服务器端Java对象之间的直接通信,从而实现页面的无刷新更新。这种技术极大地提升了用户体验,因为它消除了传统HTTP请求...
在“DWR框架基础(实现helloworld)”中,我们将学习如何搭建DWR的基本环境,并通过一个简单的“Hello, World”示例来理解其工作原理。以下是一个详尽的步骤和知识点介绍: 1. **安装与配置**: - **Eclipse集成**...
总的来说,DWR框架通过简化Ajax通信,让开发者可以更专注于业务逻辑,而不是底层的网络通信细节。这个示例将帮助你理解如何配置DWR,使其与Spring协同工作,以及如何处理集合类型的参数和返回值。通过深入学习和实践...
在这个名为"AJAX_DWR框架(二级联动+PPT实例代码)"的压缩包中,包含了以下内容: 1. **源代码**:这是实际应用AJAX_DWR技术的代码示例。通常,这些代码会展示如何实现二级联动,即在一个下拉列表的选择影响另一个...
DWR框架通过简化Ajax通信,提高了Web应用的交互性和实时性。通过配置`web.xml`文件,可以定制DWR的行为,并通过`dwr.xml`文件控制哪些Java类和方法暴露给JavaScript。开发者可以利用DWR快速地构建动态、无刷新的Web...
这个“ajax的dwr框架的一个简单的demo”是一个示例项目,用于展示如何在Web应用程序中集成DWR以实现异步数据通信。 在Java开发中,DWR提供了方便的API,使得JavaScript可以调用服务器端的Java方法,而无需传统的...
DWR 2.0是该框架的一个重要版本,提供了许多增强的功能和改进,使得在Web开发中实现Ajax更加简便高效。 1. **DWR的基本概念** - **Remoting**:远程方法调用,DWR允许JavaScript直接调用服务器上的Java方法,就像...
5. **使用DWR进行AJAX调用**:DWR提供了简单的API,如`DWRUtil`和`RemoteProxy`,使得开发者可以方便地在JavaScript中创建异步请求,调用服务器端的方法,并处理返回的结果。 6. **批量调用与回调**:DWR支持批量...
这份"RWR文档"(可能是误打,实际上应为"DWR文档")对于初学者来说是一份很好的学习资源,可以帮助理解并掌握DWR框架的核心概念和用法。 DWR的主要特点包括: 1. **远程调用(Remote Calling)**:DWR允许...
1. **设置DWR环境**:首先,你需要在服务器端安装并配置DWR。这通常涉及在web.xml文件中添加DWR的Servlet配置,以及在项目中引入dwr.jar依赖。同时,需要创建一个DWR的配置文件(如dwr.xml),用来定义允许客户端...
这篇博客文章“关于使用DWR返回对象List的方法”主要探讨了如何通过DWR框架在Java后端处理数据并以List对象的形式返回给前端JavaScript。 在Web开发中,通常我们需要从服务器获取数据并在客户端展示,DWR通过AJAX...