DWR根据dwr.xml配置文件或注解中的信息来生成和Java代码类似的JavaScript代码。DWR调用Java代码是同步的,但是创建与Java代码匹配的Ajax远程调用接口需要实现Ajax的异步调用特性,所以DWR通过引入回调函数来解决此问题,当结果被返回时,DWR会调用这个函数。
简单的回调函数
首先创建一个Java类,代码如下:
@RemoteProxy
public class SimpleRemote {
@RemoteMethod
public String getXMLData(int index) {
// write code.
}
}
该类可以在JavaScript中这样使用:
/*
<script type="text/javascript" src="dwr/engine.js"></script>
<script type="text/javascript" src="dwr/interface/SimpleRemote.js"></script>
*/
var handleGetData = function(str) {
alert(str);
};
SimpleRemote.getXMLData(1, handleGetData);
其中“1”是Java方法getXMLData()参数,此外也可减缩格式:
SimpleRemote.getXMLData(1, function(str) {
alert(str);
});
调用元数据对象
通过使用“调用元数据对象”来指定回调函数和其他选项,例如:
SimpleRemote.getXMLData(1,
{
callback: function(str) { alert(str); },
timeout: 2000,
errorHandler: function(msg) { alert("error: " + msg); }
});
在回调函数的元数据对象中可以指定超时和错误的处理方式。
查找回调函数
- 如果第一个或最后一个参数是函数,则它就是回调函数,没有元数据对象,并且其他参数都是Java的方法参数;
- 如果最后一个参数是一个对象,这个对象中有一个callback成员,并且它是个函数,则这个对象就是元数据对象,其他的都是Java方法参数;
- 如果第一个参数是null,假设没有回调函数,并且其他的都是Java方法参数。尽管如此,我们会检查最后一个参数是不是null,如果是就发出警告;
- 如果最后一个参数是null,那么就是没有callback函数。
创建与Java对象匹配的JavaScript对象
为了创建一个与Java对象匹配的JavaScript对象,首先需要创建一个供远程调用的类,实现代码如下:
@RemoteProxy
public class GetRemoteUser {
private User user;
@RemoteMethod
public void setUser(User p) {
this.user = p;
}
}
其中User类的代码如下:
@DataTransferObject
class User {
@RemoteProperty
String firstName;
@RemoteProperty
String lastName;
@RemoteProperty
Date birthday;
}
这样就可以在JavaScript中写成如下形式:
var user = {
firstName: 'Bear',
lastName: 'Bibeault',
birthday: new Date()
};
GetRemoteUser.setUser(user);
在JavaScript中没有出现的字段,在Java中就不会被设置。因为setter的返回类型都是void,这样就不需要使用callback函数了。如果需要一个返回void的服务器端方法,也可以添加callback函数,但DWR不会向它传递任何参数。
分享到:
相关推荐
- **RemoteObject**:用于封装服务器端的Java对象,使其能在JavaScript中调用。 - **Call**:表示一个Ajax调用,包括方法名、参数等信息。 - **Update**:用于更新HTML元素,通常与Ajax响应关联。 5. **使用场景...
在这个例子中,DWR被用来在客户端(JavaScript)和服务器端(Java)之间传递登录信息,实现验证过程。 首先,我们需要在服务器端创建一个Java类,该类包含一个或多个方法来处理登录验证。这些方法可能包括检查...
Direct Web Remoting (DWR) 是一个开源的Java库,它允许Web应用程序在客户端的JavaScript和服务器端的Java之间进行直接的、异步的通信,实现了Web应用中的Ajax功能。DWR通过自动化处理JavaScript和Java之间的类型...
DWR是一种JavaScript库,它允许Web应用程序与服务器端Java代码进行实时交互,实现AJAX(Asynchronous JavaScript and XML)功能,无需页面刷新就能更新部分网页内容,极大地提升了用户体验。 DWR的核心功能包括: ...
7. **事件处理与回调**:在JavaScript中,DWR提供了事件监听器和回调函数,使得用户可以自定义在远程调用成功或失败时的行为。 8. **错误处理与调试**:文档会介绍如何处理DWR调用过程中出现的错误,以及如何开启...
通过上述示例可以看出,在DWR中处理List、Set和Map等集合类型的关键在于正确配置DWR XML文件,并编写合适的客户端JavaScript代码来调用服务端的方法及处理返回的数据。这种方式大大简化了前后端之间的数据交换过程,...
DWR提供了丰富的JavaScript API,与jQuery、Prototype等库良好集成,方便在现有项目中使用。 8. **DWR的安全性和最佳实践**: - 应该限制暴露给客户端的方法,避免暴露敏感信息。 - 使用最新版本的DWR,以获取...
JavaScript Direct Web Remoting (DWR) 是一个开源的JavaScript库,它允许Web应用程序在客户端的JavaScript和服务器端的Java之间进行安全、简单的异步通信。这个框架极大地简化了AJAX(Asynchronous JavaScript and ...
DWR(Direct Web Remoting)是一种Java库,用于在Web应用程序中实现实时的、双向的JavaScript和服务器端代码交互。这个技术允许开发者在客户端浏览器上执行服务器端的方法,就像它们是本地JavaScript函数一样,极大...
DWR简化了AJAX(Asynchronous JavaScript and XML)应用的开发,使得开发者可以方便地在JavaScript中直接调用Java方法,仿佛它们是本地函数一样。 在"TestDwr"这个压缩包中,我们可以预期包含了一个简单的DWR实例,...
- **调用Java方法**:在JavaScript中,可以直接调用这些对象的方法,就像它们是本地函数一样。 - **处理回调**:DWR使用异步回调机制,当服务器响应准备好后,会自动调用预先指定的回调函数。 - **数据交换格式**...
DWR(Direct Web Remoting)是一种Java库,用于在Web应用程序中实现实时的JavaScript到服务器端Java对象的通信。这个“DWR中文教程(外带DWR包)”为初学者提供了一个全面的入门指南,帮助理解并掌握DWR的基本概念和...
#### DWR中的JavaScript - **简单的回调函数**:介绍如何使用DWR进行异步调用,并在调用完成后执行回调函数。 - **调用元数据对象**:元数据对象包含关于服务和方法的信息,可以用来动态生成客户端调用代码。 DWR...
4. **灵活的对象模型**:分析JavaScript中对象模型的特点,以及如何利用这些特点来优化代码结构。 5. **本节总结**:概括上述JavaScript高级特性的应用技巧,以及它们如何帮助开发者更高效地使用DWR。 通过以上内容...
#### 五、DWR中的JavaScript使用技巧 ##### 5.1 简单的回调函数 - **使用方法**: - 定义一个简单的JavaScript函数来处理服务器端返回的结果。 - 示例代码: ```javascript function handleResponse(data) { //...
- 在JSP页面中引入DWR的JavaScript库,并调用服务端的方法。 #### 三、web.xml配置 **2.1 主要配置** - `web.xml`文件中需要配置DWR的Servlet和初始化参数。 - 示例配置: ```xml <servlet-name>dwr ...
`engine.js`是DWR的JavaScript库,它提供了一组API,使得开发者可以在浏览器中直接调用服务器上的Java方法。 2. **Util**:`util.js`是DWR的实用工具库,包含了一系列辅助函数,如数据类型转换、事件处理、AJAX请求...