DWR - Direct Web Remoting
ajax是一种提高web站点吸引力和实用性的书写web页面的方法。它从服务器端更新web页面的特殊区域,从而增强用户的交互性。它允许信息在短时间的延迟或不用刷新页面的情况下更新。
DWR减少了开发时间,也减少了一些可能的错误,这些错误是在提供常用的方法函数并消除一些与高交互性 web站点有关的重复性代码的时候产生的。
DWR是作为开源软件(ASL verssion 2.0)而可以免费得到的。它凭借它的广阔的库、例子和指南非常易于实现。把它结合到一个现有的站点是非常简单的,同样它也可以简单地与大多数java框架结合。
util.js
util.js包含了一些使用的方法,从而帮助你利用javascript(可能)从服务器端更新你的web数据。
你可以在DWR之外的地方使用它,因为它并不依赖与DWR而实现。
它包含四个页面处理函数:
1 getText()作用于select lists。
2 getValue[s]()、setValue[s]()作用于除tables、lists和images以外的大多数html元素。
3 addRows()和removeAllRows()用于编辑tables。
4 addOptions()和removeAllOptions()用于编辑lists(如:select lists、ul、ol)。
$() :
$函数(在javascript中,他的名字是合法的)的思想是从prototype引进的。一般说来,$ = document.getElementById。在以后你花大量时间进行ajax编程的时候,在合适的地方使用这种格式是很有益的。
'$'通过给定的ID在当前HTML页面找到元素,如果多于一个的参数被提交,它就会返回一个包含已找到元素的数组。这个函数从prototype的library中得到的灵感,而且,它还能更好的工作在不同的浏览器中。
一 :Generating Lists
DWR的一个功能可以给一个下拉列表(select list)添加选项,只需使用
1 DWRUtil.addOptions()
如果你在更新列表之前,希望保留一些选项,你需要写以下一些代码:
1 var sel = DWRUtil.getValue(id);
2 DWRUtil.removeAllOptions(id);
3 DWRUtil.addOptions(id, ...);
4 DWRUtil.setValue(id, sel);
如果你想有个初始化选项,如:“please select”,你可以直接使用:
1 DWRUtil.addOptions(id, [ " Please select " ]);
二 :DWRUtil.addOptions 有5种调用方法:
1 :Array: DWRUtil.addOptions(selectid, array) 。selectid为目标ID,array为每一项的text。
2 :Array of objects (option text = option value):
DWRUtil.addOptions(selectid, data, prop) 用text和value的集合来为每一个数组元素创建一个选项,
pro参数指定text和value的值。
3:Array of objects (with differing option text and value):
DWRUtil.addOptions(selectid, array, valueprop, textprop) 用text和value的集合来为每一个数组元素创建一个选项,
valueprop确定value,textprop确定text。
4:Object: DWRUtil.addOptions(selectid, map, reverse) 为map中每一个属性(property)创建一个选项,
属性名作为选项的value,属性的value作为选项的text。这样做看起来是错的,但实际上这种做法的确是正确的。
如果reverse参数被设置为true,则属性的value还是被用做选项的value。
5:Map of objects: DWRUtil.addOptions(selectid, map, valueprop, textprop) 为map中的每一个对象创建一个选项,
valueprop指定选项的value,textprop指定选项的text。
三 :Generating Tables
DWRUtil.addRows() 从一个数组(第二个参数)取得值,创建table的每一行。从另一个数组(第三个参数)去得值,为table的每一行创建若干列。
四 :DWRUtil.getText(id)
可以根据id取得text的值,这个方法只能用于select list
五 :DWRUtil.getValue(id)
可以根据id取得value,使用这个方法,你不必在意div和select list的不同。
六 :DWRUtil.getValues()
getValues() is similar to getValue() except that the input is a Javascript object that contains name/value pairs. The names are assumed to be the IDs of HTML elements, and the values are altered to reflect the contents of those IDs. This method does not return the object in question, it alters the value that you pass to it.
这个方法和getValue()一样,只是它传入的是一个包含名字和数值的javascript对象.这个名字就是HTML元素的ID。这个方法不会返回任何对象,它只会将ID的value映射给传入的value。例:
1 function doGetValues() {
2 var text = " {
3 div: null ,
4 textarea: null ,
5 select: null ,
6 text: null ,
7 password: null ,
8 formbutton: null ,
9 button: null
10 } " ;
11
12 // javascript对象
13 var object = objectEval(text);
14 DWRUtil.getValues(object);
15 // toString
16 var reply = DWRUtil.toDescriptiveString(object, 2 );
17 // 转意
18 reply = reply.replace( / \n / g, " <br/> " );
19 // 显示
20 DWRUtil.setValue( " getvaluesret " , reply);
21
22 }
七 :DWRUtil.onReturn
贴一段代码,暂时不理解,用onReturn和不用有什么区别
1 < script >
2 function submitFunction() {
3 $( " alert " ).style.display = " inline " ;
4 setTimeout( " unsubmitFunction(); " , 1000 );
5 }
6
7 function unsubmitFunction() {
8 $( " alert " ).style.display = " none " ;
9 }
10 </ script >
11
12 < p >< input type = " text " onkeydown = " DWRUtil.onReturn(event, submitFunction) " />
13 < input type = " button " onclick = " submitFunction() " value = " GO " />
14 < span id = " alert " style = " display:none; background:#FFFFDD; font-weight:bold; " > submitFunction called </ span >
15 </ p >
八 :DWRUtil.selectRange
在一个input box里选一个范围
1 DWRUtil.selectRange( " sel-test " , $( " start " ).value, $( " end " ).value);
九 :DWRUtil.setValue(id, value)
用ID找到元素,并更新value
十 :DWRUtil.setValues()
和setValue(id,value)一样,只是它需要的参数是个javascript对象,如:
1 DWRUtil.setValues( {
2 div: " new div content " ,
3 password: " 1234567890 "
4 } );
十一 :DWRUtil.toDescriptiveString
带debug信息的toString,第一个为将要debug的对象,第二个参数为处理等级。等级如下:
1 0 : Single line of debug 单行调试
2 1 : Multi - line debug that does not dig into child objects 不分析子元素的多行调试
3 2 : Multi - line debug that digs into the 2nd layer of child objects 最多分析到第二层子元素的多行调试
And so on. Level 2 and greater probably produce too much output.
总结:DWR不但屏蔽了许多client与server交互的重复且复杂的代码,而且还提供了一些常用的方法,一些思想还是从prototype
Prototype.js作为javascript的成功的开源框架,封装了很多好用的功能
继承而来,并有一定的改进。同时,它也考虑到了与struts、hibernate、spring的结合问题。
需要注意的是,DWR是一种把服务器端的java代码通过javascript直接从浏览器调用的方法(DWR is a way of calling Java code on the server directly from Javascript in the browser.),而不是一个javascript的库(Generally speaking DWR is not a generic JavaScript library so it does not attempt to provide fill this need. However this is one of these really useful functions to have around if you are doing Ajax work.)能做到这么多,已经很难得了。
分享到:
相关推荐
3. **JavaScript接口**:在HTML页面中,引入`dwr-engine.js`,然后创建一个JavaScript对象来调用服务器端的方法,如`var myService = DWRUtil.createObject("com.example.MyService");`,接着可以调用`myService....
- `js`目录:包含DWR生成的JavaScript文件,如`dwr.engine.js`和应用自定义的接口调用文件,如`RemoteService.js`,这些文件使JavaScript能够与服务器进行通信。 - `jsp`或`html`页面:实际的Web界面,其中包含...
通过分析这个实例,你可以掌握DWR的基本用法,包括配置、类和方法的映射,以及前端JavaScript与后端Java代码的交互。这将有助于你在开发富互联网应用程序(RIA)时,有效地利用DWR的反向Ajax功能。
开发者可以通过简单的JavaScript调用来调用服务器端的方法,如`DWRUtil.useCSS()`用于加载CSS样式,`DWRInterface.callMethod()`执行远程方法。 5. **安全考虑**: DWR 提供了安全特性,如CSP(Content Security ...
**DWR(Direct Web Remoting)**是一种Java技术,它允许在Web应用程序中实现JavaScript与服务器端Java对象的直接远程调用(RPC)。通过DWR,开发者可以轻松地创建动态、交互性强的Web界面,无需处理复杂的AJAX...
- `dwr-engine.js` 和 `dwr-utils.js`:DWR提供的JavaScript库,包含用于调用服务器端方法的函数。 3. **DWR的使用步骤**: - **在服务器端创建可暴露的Java类和方法**:这些方法将在JavaScript中调用。 - **...
- **JavaScript端的使用**:学习DWR的客户端API,如`DWRUtil`和`DWREngine`,以及如何发起异步请求。 - **DWR的调试**:知道如何开启DWR的调试模式,查看请求和响应的信息。 - **Batching和Caching**:了解如何批量...
1. **dwrc.js**:这是DWR的客户端JavaScript库,包含了与服务器通信所需的API。开发者可以使用它来创建远程对象(Remote Objects)并调用其方法。例如,`DWRUtil`提供了实用工具方法,`Ajax`类则处理异步请求。 2. ...
- `dwrcfg.js`:这是DWR的核心配置文件,用于定义哪些Java类和方法可以被JavaScript调用。 - `DWRUtil`:DWR提供的工具类,包含了一些常用的辅助函数,如数据绑定、事件处理等。 - `Ajax`接口:DWR提供了与AJAX...
DWR(Direct Web Remoting)是一个开源的Java库,它允许JavaScript在客户端和服务器之间进行交互,仿佛它们是在同一台机器上运行一样。在本文中,我们将深入探讨如何使用DWR实现服务器到客户端的消息推送。 1. **...
3. **前端调用**:在HTML/JavaScript中,使用DWR API(如`DWRUtil`或`CallRemoteFunction`)来调用服务器端的分页方法,并传递当前页和每页条数等参数。 4. **处理响应**:当服务器返回分页数据时,前端代码接收并...
- 编写JavaScript代码,使用DWR API(如`DWRUtil`、`DWREngine`等)来调用服务器端的方法。 - 在HTML页面上添加必要的DWR JavaScript库,并设置回调函数来处理服务器响应。 4. **DWR的运行流程**: - 浏览器加载...
4. **编写JavaScript代码**:使用DWR提供的API,如`DWRUtil`、`RemoteObject`等,调用服务器端方法。 5. **处理响应**:在JavaScript中处理服务器返回的数据,更新页面。 **实例分析:** 在本实例中,可能包含一个...
在JavaScript端,DWR提供了一套API,如`DWRUtil`和`DWREngine`,用于与服务器进行交互。假设我们有上面配置的`DemoService`,在JavaScript中调用`getHello`方法可能如下所示: ```javascript DWREngine.beginBatch...
5. **JavaScript API**:DWR提供了丰富的JavaScript库,包括`DWRUtil`工具类和`RemoteObject`接口,使得在JavaScript中调用服务器方法变得简单。例如,你可以使用`create`方法创建一个与服务器对象的会话,然后调用...
4. **DWR API**:DWR提供了几种主要的API,如`DWRUtil`、`RemoteProxy`等,用于在JavaScript中创建和调用Java对象。例如,`create()`方法用于创建一个与后端Java对象的连接,`call()`方法用于执行远程方法。 5. **...
- 在JavaScript中,使用`DWRUtil`或`DWREngine`对象来调用Java方法,获取数据后更新DOM以改变下拉框的选项。 5. **事件处理与异步通信**: - 使用`onChange`事件监听下拉框的改变,当用户选择一个选项时,触发DWR...
- 在JavaScript中使用:通过DWR的API,如`DWRUtil`或`dwrtags`,调用服务器端的方法并处理返回的数据。 5. **DWR的安全性**: - DWR提供了CSP(Content Security Policy)支持,以增强应用的安全性,防止跨站脚本...
3. **DWR API:**掌握DWR提供的主要API,如`DWRUtil`工具类,以及`RemoteObject`和`Batch`接口,理解它们在实际开发中的作用。 4. **映射与安全:**了解如何设置DWR的映射文件(dwr.xml),定义允许客户端访问的...
通过分析这些文件,我们可以学习到如何实际操作DWR来实现这样的功能,包括但不限于DWR的配置文件(dwr.xml)、JavaScript接口调用、服务器端的Java处理类、以及可能的数据库查询语句。 总的来说,"dwr实现的四级...