专栏首页源哥的专栏在DWR中实现直接获取一个JAVA类的返回值

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

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

    }

}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • DWR文档之 技巧和要点

    这里列出了在使用DWR时候的一些技巧和要点,希望对你有所帮助。请对你有过帮助的地方添加评论…

    源哥
  • 比特币深度分析

        最近电视、新闻、网站经常有讲到比特币,但普通人经常被比特币的各种信息搞得一头雾水,到底什么是比特币,它是谁开发的,它跟Q币有什么区别,它是不是一个庞氏骗...

    源哥
  • "struts中文问题","struts国际化问题"的终极解决方案[转载]

    Java本身就支持多国语言编码,不需要写任何程序,可以很简单的 实现。 秘诀就是两点:

    源哥
  • 如何寻找同源基因---OrthoFinder

    构建物种的系统发育树,计算kaks值或者比较基因组学和进化的其他分析都少不了需要寻找同源基因。

    阿凡亮
  • 能用数学归纳法做证明题的 Wolfram|Alpha

    世界第一个不受语法束缚的基于数学归纳法的Proof Generator于2016年在 Wolfram|Alpha上闪亮登场,它的设计和创建离不开创意、行动力和优...

    WolframChina
  • 学员投稿 | iframe 解决跨域

    ? 天气降温,大家注意保暖~~~ ? 因为学习了腾讯课堂NEXT学院的前端进阶课程,所以打算把课程内容都总结一遍。有些都是很普通很常见的知识,但是为了巩固自...

    腾讯NEXT学位
  • 快速上手 Linux 系统部署 Java 项目(附安装包、文档、视频)!

    VMware Workstation 是一款桌面虚拟计算机软件,可在一部实体机器上模拟完整的网络环境,我们通过 VMware 可以在单一的桌面上同时运行不同的操...

    南风
  • 投融资汇总 | 本周(8.12-8.18)英特尔为AI芯片又收购一家公司

    本周硬科技领域投融资事件一共37起,人工智能领域发生14起融资事件和1起收购事件,占比40%;区块链领域发生7起融资事件,占比19%;生物医疗领域发生5起融资事...

    镁客网
  • 过年别再逼婚了,《黑镜》里的AI相亲系统是对爱情最好的匹配

    编辑:弗朗西斯 【新智元导读】春节将至,单身一人回家过年难免会被问到有无对象,何时结婚,心中难免五味杂陈。最近被大家热议的神剧《黑镜》第四季中的一集,却为苦于找...

    新智元
  • 科大讯飞1024开发者节最全演讲实录+PPT,看看刘庆峰和胡郁到底释放了哪些重要信号

    作者 | 鸽子 10月24日,科大讯飞1024开发者节在合肥开幕。 开幕式上,科大讯飞董事长刘庆峰,执行总裁,消费者BG总裁胡郁分别从务虚和务实两个方面,介绍了...

    AI科技大本营

扫码关注云+社区

领取腾讯云代金券