原文:http://blog.csdn.net/sunlen/archive/2007/01/10/1479649.aspx
DWR
是Ajax的一个开源框架,可以很方便是实现调用远程Java类。但是,DWR只能采用回调函数的方法,在回调函数中获取返回值,然后进行处理。那么,到底有没有办法直接获取一个方法的放回值呢?
下面我写一个简单的Java类,如下:
public class Test()
{
public String getString()
{
return "test";
}
}
上面这个类很简单,里面的getString就直接返回一个字符串。
我们假设在DWR中配置了Test在DWR中所对应的类未JTest,那么我们要调用getString方法,可以这样写:
function Test()
{
//
调用Java类Test的getString方法,callBackFun为回调函数
JTest.getString(callBackFun);
//
回调函数
function callBackFun(data)
{
alert(data);
}
}
这里处理很简单,就是调用java类的方法,然后在回调函数中处理,上面那段话执行后会显示test,也就是java方法的返回值。但是,采用回家函数不符合我们的习惯,有些时候我们就想直接获取返回值进行处理,这时候就无能为力了。
我们知道,DWR是Ajax的框架,那么必然拥有了Ajax的特性了。
先来说说Ajax的运行原理吧,其实它的原理很简单,就是调用远端地址,获取页面返回数据,然后进行分析处理。而这个过程是异步的,就就是为什么DWR采用回调函数的原因了,而你不知道,我们调用了Java类后,回调函数不知道什么时候执行。
再来看看Ajax的方法,其中,XMLHttpRequest的open函数是有一个是否同步参数,如下:
XMLHttpRequest.open(String method, String URL, boolean asynchronous)
其中的asynchronous就是是否同步的参数了。
现在,让我们打开DWR的engine.js文件,搜索一个asyn,马上,就发现了一个setAsync方法,原来,DWR是这个方法设置成属性封装起来了。这样,我们就可以实现获取返回值的功能了。
下面,我在DWR中封装出Java类,如下:
function Test()
{
var _data = "";
this.getString = function()
{
//
设置成同步
DWREngine.setAsync(false);
//
调用Java类Test的getString方法,callBackFun为回调函数
JTest.getString(callBackFun);
//
重新设置为异步方式
DWREngine.setAsync(true);
return _data;
}
//
回调函数
function callBackFun(data)
{
_data = data;
}
}
上面这个方法,在调用java方法之前先设置为同步方式,那么调用java方法后,执行了回调函数后,才接着执行下面的语句,这样子,返回_data就已经赋值了,所以可以正常获取值。
上面这些写法比较麻烦,可以写成下面方式:
function Test()
{
var _data = "";
this.getString = function()
{
//
设置成同步
DWREngine.setAsync(false);
//
调用Java类Test的getString方法,callBackFun为回调函数
JTest.getString(function(data){_data = data;});
//
重新设置为异步方式
DWREngine.setAsync(true);
return _data;
}
}
分享到:
相关推荐
在DWR中,你可以直接调用Java类的方法并获取其返回值,这对于创建实时更新的用户界面非常有用。本文将详细介绍两种在DWR中实现这一功能的方法。 ### 方法一:通过同步调用来获取返回值 这种方法首先将DWR引擎设置...
根据提供的部分代码内容,我们可以看到一个简单的例子展示了如何在DWR中获取回调函数的返回值。 ##### 1. 后端Java类定义 首先,我们需要定义一个Java类,用于提供服务端的方法供前端调用。在这个案例中,定义了一...
DWR (Direct Web Remoting) 是一种开源的Java库,用于在Web应用程序中实现JavaScript与服务器端Java对象的双向通信。DWR使得开发者能够在浏览器端直接调用服务器上的方法,从而实现实时的数据交换和更新,这对于构建...
Java Direct Web Remoting (DWR) 是一个开源的Java库,它允许JavaScript在浏览器中直接调用服务器端的Java方法,实现Ajax(异步JavaScript和XML)应用。DWR简化了客户端与服务器端的交互,使得开发人员可以利用Java...
在实现级联的过程中,我们首先要在服务器端创建相关的Java类和方法。例如,我们可以有一个名为`RegionService`的类,其中包含获取省份列表和根据省份ID获取城市列表的方法。这些方法的返回值通常是JSON格式的数据,...
在“dynamic.rar”这个压缩包中,我们可能找到了一个关于使用DWR实现两级联动的例子。两级联动通常指的是在一个下拉列表的选择会影响另一个下拉列表的选项,这种交互常见于省市区选择、产品分类等场景。 DWR的核心...
在DWR中,如果你的Java方法返回一个字符串,这个字符串会直接在JavaScript端可用。例如,服务器端有一个方法`getString()`返回一个字符串,DWR会自动将这个字符串传递给JavaScript回调函数。这在显示消息、错误信息...
DWR (Direct Web Remoting) 是一个开源框架,它允许Web应用程序在客户端JavaScript和服务器端Java之间进行异步通信。DWR简化了Ajax(Asynchronous JavaScript and XML)的实现,使得开发者无需直接编写复杂的...
Direct Web Remoting (DWR) 是一个开源的Java库,它允许JavaScript在浏览器端与服务器端的Java代码进行交互,实现动态Web应用的功能。在这个"Dwr源码示例"中,我们将深入探讨如何使用DWR调用Java方法,并处理各种...
- 创建一个简单的Java类,例如`HelloWorldService`,定义一个公开的方法,如`sayHello()`。 - 使用DWR注解标记该方法,以便使其可以通过DWR调用。 6. **编写JavaScript客户端代码**: - 在HTML页面中引入DWR的...
Direct Web Remoting (DWR) 是一个开源的Java库,它允许JavaScript在浏览器端与服务器端的Java对象进行交互,实现动态的Web应用。DWR通过AJAX技术提供了一个安全、方便的方式,使得Web开发者可以轻松地在客户端和...
DWR (Direct Web Remoting) 是一种用于在Web应用程序中实现AJAX技术的框架,它允许JavaScript直接调用服务器端的Java方法,从而实现实时的动态数据交换。以下是对DWR调用及传参方式的详细说明: 1. **无返回值和...
DWR的一个创新之处在于它通过动态生成基于Java类的JavaScript代码,让JavaScript代码能直接调用服务器端的Java方法。为了安全性,开发者需要在`dwr.xml`配置文件中明确指定哪些Java类和方法可以被外部访问。 配置...
`<create>` 标签指定了JavaScript中可访问的Java类以及DWR获取该类实例的方式,如使用默认构造函数(`creator="new"` )。`javascript` 属性定义了JavaScript代码中使用的对象名称。`<include>` 标签指定了要公开给...
3. **依赖注入**:DWR中的Java对象可以直接利用Spring的DI机制,获取其他服务或对象,这使得业务逻辑更易于管理和测试。 4. **安全性**:整合DWR和Spring可以利用Spring的安全框架,对远程方法调用进行权限控制,...
Direct Web Remoting (DWR) 是一个开源的Java库,它允许在JavaScript和服务器端的Java之间进行异步通信,从而实现Web应用的Ajax功能。在这个例子中,我们将深入探讨如何利用DWR来返回JSON数据。 JSON(JavaScript ...
DWR,全称Direct Web Remoting,是一个开源的Java库,用于在Web应用程序中实现Ajax(异步JavaScript和XML)功能。它简化了JavaScript和服务器端Java代码之间的交互,使得开发者能够在浏览器中直接调用服务器上的方法...
Spring是一个流行的Java应用框架,DWR可以无缝集成Spring,利用Spring的依赖注入功能来创建和管理service对象。 **4.3 DWR与JSF** JSF是Java Server Faces的简称,是Java EE平台的一部分,用于构建用户界面。DWR...
DWR会自动创建一个JavaScript接口,使得你可以直接在浏览器中调用`UserService`的`getUserList()`方法。 描述中提到的“各种返回值”,意味着示例可能包含了不同的数据类型返回,如`list`、`Map`、`String`和`...