`
liaoyixun
  • 浏览: 47075 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论
阅读更多
Scripting Introduction
DWR generates Javascript code that is similar to the Java code that exported using dwr.xml.

The biggest challenge in creating a remote interface to match some Java code across Ajax is the (usually) asynchronous nature of Ajax, compared to the synchronous nature of a normal Java call.

DWR solves this problem by introducing a callback function that is called when the data is returned from the server.

There are 2 recommended ways to make a call using DWR. Either using by appending a callback function to the parameter list or by appending a call meta data object.

It is also possible to put the callback function at the start of the parameter list, however this option is not advised because there are some issues when dealing with automatic http objects (see "Alternative Method"). This method mostly remains for backwards compatibility.

Simple Callback Functions
Suppose we have a Java method that looks like this:

public class Remote {
    public String getData(int index) { ... }
}
We can use this from Javascript as follows:

<script type="text/javascript"
    src="[WEBAPP]/dwr/interface/Remote.js"> </script>
<script type="text/javascript"
    src="[WEBAPP]/dwr/engine.js"> </script>
...

function handleGetData(str) {
  alert(str);
}

Remote.getData(42, handleGetData);
'42' is just the parameter to the getData() Java function - see above.

Alternatively you can use the all-in-one-line version:

Remote.getData(42, function(str) { alert(str); });
Call Meta-Data Objects
The alternative syntax is to make use of a call meta-data object that specifies the callback function and (optionally) other options. The example above would become:

Remote.getData(42, {
  callback:function(str) { alert(str); }
});
This method has some advantages: Depending on your style it may be easier to read, but more importantly it allows you to specify extra call options.

Timeouts and Handling Errors
In addition to the callback meta data you can also specify a timeout and an errorHandler. For example:

Remote.getData(42, {
  callback:function(str) { alert(str); },
  timeout:5000,
  errorHandler:function(message) { alert("Oops: " + message); }
});
Finding the callback method
There are some instances when it might not be tricky to distinguish between the various callback placement options. (Remember that Javascript does not support overloaded functions). For example:

Remote.method({ timeout:3 }, { errorHandler:somefunc });
One of the 2 parameters is a bean parameter and the other is a call meta-data object but we have no way of telling which. In a cross-browser world we have to assume that null == undefined. So currently, the rules are:

If there is a function first or last then this is the callback function, there is no call meta-data object and the other parameters are the Java args.
Otherwise, if the last param is an object with a callback member that is a function then this is call meta-data the other params are Java args.
Otherwise, if the first parameter is null we assume that there is no callback function and the remaining params are Java args. HOWEVER we check to see that the last param is not null and give a warning if it is.
Finally if the last param is null, then there is no callback function.
Otherwise, this is a badly formatted request - signal an error.
Creating Javascript objects to match Java objects
Suppose you have an exposed Java method like this:

public class Remote {
  public void setPerson(Person p) {
    this.person = p;
  }
}
And Person looks like this:

public Person {
  private String name;
  private int age;
  private Date[] appointments;
  // getters and setters ...
}
Then you can call this from Javascript like this:

var p = {
  name:"Fred Bloggs",
  age:42,
  appointments:[ new Date(), new Date("1 Jan 2008") ]
};
Remote.setPerson(p);
Any fields missing from the Javascript representation will be left unset in the Java version.

Since the setter returned 'void' we did not need to use a callback and could just leave it out. If you want to be notified of the completion of a server-side method that returns void then you can include a callback method. Obviously DWR will not pass any data to it.

分享到:
评论

相关推荐

    dwr原理深入透彻讲解

    2. **引擎加载**:当浏览器加载`engine.js`时,DWR引擎开始启动。它会检查`web.xml`和`dwr.xml`的配置,这些配置文件定义了哪些Java类可以被远程调用,以及如何创建这些对象。 3. **资源传输**:DWR引擎通过Servlet...

    DWR2相关资料

    通过这个示例项目,学习者可以深入理解DWR2的工作原理,如何配置和使用DWR,以及如何在实际项目中利用DWR提高用户体验。同时,它也提供了实践机会,帮助开发者熟练掌握DWR2的各种特性和用法。在探索这个压缩包的过程...

    DWR原理及中文文档

    DWR(Direct Web Remoting)是一种Java库,用于在Web应用程序中实现JavaScript和服务器端Java对象之间的双向通信。...通过深入学习DWR的原理和实践,开发者可以构建出更具吸引力和响应性的Web应用。

    Practical.DWR.2.Projects

    本书首先介绍了DWR的基本原理、架构以及安装配置流程,为读者提供了一个坚实的基础,确保他们能够顺利地开始项目开发。 #### 2. **项目示例** - **在线聊天室**:展示了如何使用DWR实现实时双向通信,创建一个动态...

    DWR2学习整理资料

    2. **配置DWRServlet**:在web.xml中配置DWRServlet,指定DWR配置文件的位置,如dwrcfg.xml或dwr.xml,并可配置多个config开头的文件。 3. **debug参数**:在web.xml中可设置debug参数,开启后可测试配置的DWR方法。...

    dwr笔记 dwr自学资料

    本笔记将深入探讨DWR的核心概念、工作原理以及实际应用。 一、DWR简介 DWR的主要目标是消除传统的HTTP请求-响应模式的局限性,提供一种更加高效、灵活的远程调用机制。通过DWR,开发者可以在浏览器中编写JavaScript...

    dwr demo dwr简单使用

    通过这个简单的DWR演示项目,你可以深入理解DWR的工作原理,掌握如何配置DWR、编写可被客户端调用的Java方法,以及如何在JavaScript中使用这些方法。这对于想要学习和使用DWR来构建动态Web应用的初学者来说是一个很...

    DWR的学习资料,DWR学习必备

    DWR开发培训.ppt、DWR.ppt:这些可能是DWR的培训演示文稿,包含了一系列主题的讲解,可能涵盖了DWR的工作原理、核心组件、使用示例和最佳实践。通过这些PPT,你可以系统地学习DWR,并通过实例加深理解。 DWR与界面...

    DWR3.0.jar、DWR.war和DWR2.0中文说明文档

    2. **DWR的实例war文件**: 一个WAR(Web Application Archive)文件是Java Web应用的标准打包格式,可以直接部署在支持Servlet的Web服务器上。DWR的实例war文件通常包含了一个预配置的DWR应用,展示了如何在实际...

    dwr.rar_ajax d_dwr_dwr ajax_dwr struts2 example_struts2 ajax dwr

    在这个“dwr.rar”压缩包中,包含了一些关于DWR与Struts2框架整合使用的示例,对于学习和理解DWR在实际项目中的应用非常有帮助。 DWR的核心功能在于它提供了一种安全、高效的机制,使得前端JavaScript可以直接调用...

    Struts2-Webwork2-DWR

    Struts2、Webwork2 和 DWR 是三个在 Web 开发领域中至关重要的技术,尤其在构建企业级的 WEB2.0 应用程序时。接下来,我们将详细探讨这三个技术的核心概念、工作原理以及它们之间的关系。 **Struts2** 是一个基于 ...

    dwr实战,Practical DWR 2 Projects,PDF书籍及源码

    提供的源码可能包含与书中的示例项目相对应的代码,读者可以跟随书中步骤运行和修改这些代码,加深对DWR工作原理的理解。 通过阅读这本书和实践源码,开发者可以学习到如何有效地利用DWR来构建更动态、响应更快的...

    DWR中文文档 (DWR 2.0)

    2. **下载DWR库**:从官方站点或其他可信源下载最新的DWR库。 3. **创建项目**:使用IDE或手动创建一个新的Java Web项目。 4. **添加DWR依赖**:将下载的DWR库文件添加到项目的类路径中。 5. **编写Java服务端代码**...

    dwr.rar_dwr jar_dwr j_dwr jar_dwr.j_dwr.jar2

    DWR的工作原理可以简单概括为以下几个步骤: 1. **配置**:在服务器端,开发者需要在web.xml中配置DWR的Servlet,以启用DWR服务。 2. **映射**:定义JavaScript与Java方法的映射关系,这可以通过DWR的XML配置文件或...

    DWR的基本原理以及前后台互相调用并整合SPRING的简易DEMO

    在这个“DWR的基本原理以及前后台互相调用并整合SPRING的简易DEMO”中,我们将探讨DWR的核心概念和如何将它与Spring框架集成。首先,我们需要理解DWR的工作机制: 1. **DWR Engine**:这是DWR的核心组件,负责处理...

    dwr实例,从后台取数据显示

    1. **DWR的工作原理**:DWR通过在服务器上设置一个代理,允许JavaScript调用Java方法,就像它们是本地函数一样。它处理了跨域问题,自动序列化和反序列化数据,并且支持异步调用,减少了页面刷新的需求。 2. **DWR...

    DWR介绍

    #### 二、DWR的工作原理 DWR的核心在于其能够动态生成用于调用服务器端JavaBean方法的JavaScript库。具体来说,当DWR运行时,会根据配置生成一个JavaScript库,这个库包含了对服务器端JavaBean的封装,从而允许前端...

    Dwr例子带注释

    通过研究这个"TestDwr"项目,你可以了解到如何在实际应用中集成和使用DWR,理解DWR的工作原理,并掌握创建交互式Web应用的基本技能。这个简单的例子可以帮助你快速上手DWR,为后续深入学习和实践打下基础。

    DWR框架学习demo

    **DWR(Direct Web Remoting)框架学习指南** DWR,全称为Direct Web Remoting,是一种在Web应用程序中实现客户端与服务器端之间直接...理解DWR的工作原理以及如何配置和使用,对于开发人员来说是非常有价值的技能。

    dwr.jar/dwr-2.0.5-src.zip/dwr.zip

    通过查看源代码,开发者可以深入理解DWR的工作原理,定制和扩展其功能,或者排查遇到的问题。源代码还包含了一些示例和测试用例,帮助开发者快速上手。 3. **dwr.zip**: 这可能是一个重复的文件,或者包含了与dwr...

Global site tag (gtag.js) - Google Analytics