博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在DWR中实现直接获取一个JAVA类的返回值
阅读量:2170 次
发布时间:2019-05-01

本文共 1677 字,大约阅读时间需要 5 分钟。

                            在DWR中实现直接获取一个JAVA类的返回值

    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;
    }
}

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1479649

 
你可能感兴趣的文章
深入理解JVM虚拟机3:垃圾回收器详解
查看>>
深入理解JVM虚拟机4:Java class介绍与解析实践
查看>>
深入理解JVM虚拟机5:虚拟机字节码执行引擎
查看>>
深入理解JVM虚拟机6:深入理解JVM类加载机制
查看>>
深入了解JVM虚拟机8:Java的编译期优化与运行期优化
查看>>
深入理解JVM虚拟机9:JVM监控工具与诊断实践
查看>>
深入理解JVM虚拟机10:JVM常用参数以及调优实践
查看>>
深入理解JVM虚拟机11:Java内存异常原理与实践
查看>>
深入理解JVM虚拟机12:JVM性能管理神器VisualVM介绍与实战
查看>>
深入理解JVM虚拟机13:再谈四种引用及GC实践
查看>>
Spring源码剖析1:Spring概述
查看>>
Spring源码剖析2:初探Spring IOC核心流程
查看>>
Spring源码剖析3:Spring IOC容器的加载过程
查看>>
Spring源码剖析4:懒加载的单例Bean获取过程分析
查看>>
Spring源码剖析5:JDK和cglib动态代理原理详解
查看>>
Spring源码剖析6:Spring AOP概述
查看>>
Spring源码剖析7:AOP实现原理详解
查看>>
Spring源码剖析8:Spring事务概述
查看>>
Spring源码剖析9:Spring事务源码剖析
查看>>
重新学习Mysql数据库1:无废话MySQL入门
查看>>