下面我们通过实做AJAX对Dorado7中的AJAX操作做一定的了解。

页面功能描述:

首先我们设计一个Spring的JavaBean:

页面上放置三个按钮:button1, button2, button3单击button1的时候,调用spring中的一个bean的方法toUpperCase,并将我们传入的字符串转换为大写,并返回到前台浏览器中;

单击button2的时候,调用spring中的一个bean的方法multiply,并将我们传入Map对象(含多个key)中的两个数字相乘,并将计算结果返回到前台浏览器中;

单击button1的时候,调用spring中的一个bean的方法getSystemInfo,并将Java中的一个Map对象返回到前台浏览器中;

如果完成了以上的三个功能,我们就很容易解决这些AJAX技术问题:如何调用Spring中bean中指定的业务方法;

如何传入一个单值给后台,并将调用结果为单值的值如何返回到前台;

如何传入一个map到后台,并将运算结果返回到前台;

如何调用后台的业务方法,并将计算结果为map的值返回到前台;

掌握了以上基本技术之后,再将它们综合应用一下,如JS中指定map参数,ajax调用结束之后返回map对象,并在前端使用。这样我们就可以解决大部分的ajax调用问题了。

toUpperCase

下面我们还是在HelloWorld中实做这个范例,由于HelloWorld中已经定义过Ajax这个Bean了,我们不再重复定义,我们在com.bstek.dorado.sample.training目录中新建一个名称为Ajax的View,并在其中添加一个AjaxAction控件和Button控件,其中AjaxAction是Action的一种,我们在控件的基础知识中简单介绍过它代表了页面上的一种动作,是不可见的对象。但是它可以被其他可见控件使用,例如单击按钮时触发Action。

我们设置AjaxAction控件的相关属性:

属性值

idtoUpperCaseAction

captionTo UpperCase

parameterHello World!

serviceajax#toUpperCase

其中我们特别关注其service属性,"ajax#toUpperCase"是一个服务名称,根据Dorado中的服务定位表达式,它最终代表的含义是调用Ajax这个类的toUpperCase方法,至于服务表达式的概念我们后面再讲,这儿我们只要记住这个字符串最终会调用到Ajax这个类的toUpperCase方法就可以。而parameter的值就代表了调用toUpperCase方法传入的参数值。

再设置Button控件的相关属性:

属性值

actiontoUpperCaseAction

定义action属性的效果是,单击按钮的时候自动触发toUpperCaseAction。我们可以注意到Button上的显示内容我们都没有定义,该处根据Action的绑定规则它会自动显示action对应的caption,而toUpperCaseAction中我们已经定义了caption了。

另外,当Ajax这个类的toUpperCase方法执行结束之后,我们希望在浏览器中看到最终的返回值,那么我们定义toUpperCaseAction的onSuccess事件:

在当前目录下新建Ajax.js文件,输入如下代码:

在action的onSuccess事件中,self代表了action本身,returnValue表示Ajax调用结束后Java层返回的结果。该处关于JS代码的写法后面我们会有专门的章节进行说明,此处我们记住self.get("returnValue")的含义就是获得ajax调用返回的结果就可以。

这样我们就完成了第一个按钮的开发,在浏览器中打开这个页面(http://localhost:8080/sample-center/com.bstek.dorado.sample.training.Ajax.d)查看效果:

multiply

下面我们接着做multiply的ajax调用,同样我们再添加一个AjaxAction和一个Button。

我们设置AjaxAction控件的相关属性:

属性值

idmultiplyAction

executingMessageComputing...

serviceajax#multiply

通过toUpperCase实例的制作,我们知道了"ajax#multiply",它最终代表的含义是调用Ajax这个类的multiply方法。executingMessage是用于在Ajax调用时给客户一个提示信息,在Ajax调用结束之后会自动消失,这样对于某些耗时的ajax调用来说这种显示效果更为人性化。

再设置Button控件的相关属性:

属性值

idmultiplyButton

actionmultiplyAction

captionAjax Multiply

定义action属性的效果是,单击按钮的时候自动触发toUpperCaseAction。另外与toUpperCase范例不同,这次我们直接在Button上定义caption,其实这几种定义caption的方式都可行,根据实际场景灵活运用就是了。例如我们希望动态改变按钮绑定的action时,我们就可以考虑将caption定义在action中。

另外,当Ajax这个类的multiply方法被调用时需要两个参数,我们希望给用户一个自定义输入参数的机会,而不是toUpperCase用例中直接定义在parameter属性中,如下图:

则我们在Ajax.js中给button1的onClick代码中添加如下的JS:

其中我们通过Dorado提供的MessageBox做用户输入界面,MessageBox的具体用法参考:http://www.bsdn.org/projects/dorado7/deploy/jsdoc/class.html?symbol=dorado.MessageBox.

我们将用户输入的值利用js的split拆分为两个数字,num1和num2封装到parameter中(可以想象成一个Map),并将这个parameter设置给action去调用服务器端的multiply方法。

我们回过头在看看multiply方法:

当map对象传到Ajax类的时候,发现没有匹配的方法,这个时候Dorado的自动方法适配机制会自动的将map拆为num1和num2,从而调用到multiply方法。有关自动方法适配我们后面还会再讲。multiply做的工作就是将num1和num2相乘,并将结果返回。我们在Button的onClick代码中利用了一个回调函数将计算结果显示出来(回调函数用法会在后面的JavaScript基础中进一步说明)。

getSystemInfo

下面我们做getSystemInfo的ajax调用,同样我们再添加一个AjaxAction和一个Button。

我们设置AjaxAction控件的相关属性:

属性值

idgetSystemInfoAction

captionRetrieve Dorado7 System Information

serviceajax#getSystemInfo

通过toUpperCase实例的制作,我们知道了"ajax#getSystemInfo",它最终代表的含义是调用Ajax这个类的getSystemInfo方法。

再设置Button控件的相关属性:

属性值

actiongetSystemInfoAction

定义action属性的效果是,单击按钮的时候自动触发getSystemInfo。

另外,当Ajax这个类的getSystemInfo方法调用成功后返回的是一个Properties对象,这也是一个Map对象,我们希望在浏览器中看到最终的返回值,那么我们在Ajax.js中定义getSystemInfoAction的onSuccess事件:

在action的onSuccess事件中,self代表了action本身,returnValue表示Ajax调用结束后Java层返回的结果。由于返回的是一个Map对象,在浏览器中接受的时候会自动转为JSON对象,这样我们就可以直接通过info.product,info.veneor,info.version范围map中的内容。

这样我们就完成了第三个按钮的开发,在浏览器中打开这个页面(http://localhost:8080/sample-center/com.bstek.dorado.sample.training.Ajax.d)查看效果:

ajax+++fc,06. 实做AJAX(SEFC)相关推荐

  1. 关于MultiActionController异步请求Ajax,pc端正常,手机端报error错误;此问题一般是通过setInterval,seTimeout,做Ajax轮询时会产生此问题;

    此问题全网唯一! 关于MultiActionController异步请求Ajax,pc端正常,手机端报error问题:此问题一般是通过setInterval,seTimeout,做Ajax轮询时会产生 ...

  2. ie浏览器如何创建ajax,唯独ie浏览器缓存ajax请求

    用fiddler调试http请求,在ie浏览器下,如果请求命中缓存,fiddler不会包含该请求.但是在chrome下会包含缓存的请求,Result显示为304. ie浏览器还会缓存通过ajax请求的 ...

  3. 【学无止境】ajax长循环,反向ajax初体会,不用ws实现即时聊天

    反向ajax ajax长循环,又叫comet机制,但是我最喜欢的还是叫他反向ajax 反向ajax,顾名思义,就是不是客户端来请求服务器端,而是服务器端请求客户端,这样做的好处是节省了大量以前轮询造成 ...

  4. 详细解读Jquery各Ajax函数:$.get(),$.post(),$.ajax(),$.getJSON()

    一,$.get(url,[data],[callback]) 说明:url为请求地址,data为请求数据的列表(是可选的,也可以将要传的参数写在url里面),callback为请求成功后的回调函数,该 ...

  5. ajax改变div内容,jquery ajax双击div可直接修改div中的内容

    最近在做后台功能开发的时候,用到对排序字段的修改,感觉只为了修改一个排序值,而要重新进入编辑页比较麻烦,于是网上找点资料自己动手写了一个jquery双击实现直接修改排序值的效果: html代码: {$ ...

  6. AJAX初识(原生JS版AJAX和Jquery版AJAX)

    一.什么是JSON 1.介绍JSON独立于语言,是一种与语言无关的数据格式.JSON指的是JavaScript对象表示法(JavaScript Object Notation)JSON是轻量级的文本数 ...

  7. java 判断请求为 ajax请求_Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求...

    Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求 java 判断请求是不是ajax请求,Java判断是否为ajax请求 >>>>>> ...

  8. ajax保存避免重复提交,ajax 实现防止重复提交

    搜索热词 下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. 防止ajax重复提交 提交 /** * 模拟ajax提交 * @fn 回调函数 ...

  9. Asp.net ajax、Anthem.net、Ajax pro三大ajax框架那一种使用比较方便?易于配置?

    ·      aspxcsharp Asp.net ajax.Anthem.net.Ajax pro三大ajax框架那一种使用比较方便?易于配置? Ajax Pro如何实现DataGrid无刷新? o ...

最新文章

  1. 去除文本框点击的背影
  2. 神经网络的梯度消失和过拟合产生原因及其解决方案
  3. LeetCode 718. 最长重复子数组(DP)
  4. docker登录mysql数据库_Docker下搭建mysql数据库
  5. flask登录验证用ajax,基于 Ajax 请求的 Flask-Login 认证
  6. DRUID连接池:java.sql.SQLRecoverableException: 关闭的语句
  7. mysql 子查询空_mysql的子查询
  8. How to use neural network to realize logic 'and' and 'or'?
  9. php解析酷狗音乐,PHP_将酷狗krc歌词解析并转换为lrc歌词php源码,最近在进行一次对酷狗音乐歌 - phpStudy...
  10. 解读《美国国家BIM标准》 – BIM能力成熟度模型(四)
  11. 如何准备PMP新版大纲考试?
  12. 【嵌入式工程师常用网站】
  13. python图像_Python图像处理
  14. HHS整合(Struts2+Spring+Hibernate)
  15. kettle demo6 解压缩
  16. Python3.6-Flask:制作一个语音对话问答机器人系统(网页版)
  17. 数组的定义,一维数组,二维数组与变长数组
  18. 【BZOJ4755】 [Jsoi2016]扭动的回文串
  19. MyBatis动态代理原理
  20. valueAnimator 属性动画

热门文章

  1. qt 进度条最小_QT:圆形进度条设计
  2. 搜狗浏览器收藏夹在哪_搜狗浏览器居然流氓到操作我的微博账号
  3. vscode配置js环境_VS Code配置Python开发环境
  4. JAVA核心技术_【读】Java核心技术卷1
  5. java 遍历所有内部类_JAVA-内部类
  6. 吴恩达深度学习之二《改善深层神经网络:超参数调试、正则化以及优化》学习笔记
  7. Redis基础(三)——数据类型
  8. 反射实现方法调用(1):执行机制
  9. python接口自动化(三十四)-封装与调用--函数和参数化(详解)
  10. 计算机算法知识点总结,2021计算机考研知识点总结(1)