简介
用于执行远程过程的动作控件。此控件仅在配合Dorado服务端的开发模式中有意义。
参考范例:http://www.bsdn.org/projects/dorado7/deploy/sample-center/com.bstek.dorado.sample.Main.d#4900
配套说明文档:06. 实做AJAX(SEFC)
AjaxAction调用的服务一般都需要使用@Expose标记注册到ExposedService中:
@Component public class AjaxTestService { @Expose public String toUpperCase(String parameter) { return "input:\n" + parameter + "\n\n" + "output:\n" + parameter.toUpperCase(); } }
关于ExposedService的详细说明请参考:Ajax(SEQS)#开发Ajax功能
详细属性说明
AjaxAction继承自Action,因此其基本属性请参考:Action
下面我们将只针对其特有的一些属性加以说明:
service
service用于指向具体的后台服务,我们会在后面随ExposedService一同介绍,parameter属性是传递给后台服务的参数,当命令执行成功之后读取returnValue属性可以获得服务端返回的信息。
RemoteServiceAction有同步和异步两种执行模式,通过其async属性可以进行选择。默认是以异步方式执行的,如无特殊需要我们也不推荐您以同步方式执行Ajax操作。
ExposedService
ExposedService就是指暴露给前端的服务,一般而言对应一个服务端的方法。Dorado7的客户端并不能自由的访问任意的后台服务,只有那些被明确声明为暴露的服务才能被客户端访问。要配置一个ExposedService服务的方法非常简单--使用@Expose标注。例如toUpperCaseAction相应的后台服务的声明位于org.dorado.sample.service.ajaxTestService类中,代码如下:
@Component public class AjaxTestService { @Expose public String toUpperCase(String parameter) { return "input:\n" + parameter + "\n\n" + "output:\n" + parameter.toUpperCase(); } }
这段代码及其中Annotation的作用是在Spring上下文中注册一个名为ajaxTestService的Bean(这是有Spring提供的@Component标注完成的),并且将此Bean中的toUpperCase方法标注为可暴露服务。
在之前的内容可知RemoteServiceAction是通过spring:ajaxTestService#toUpperCase这样一个字符串来描述该服务的,该字符串的含义是Spring上下文中名为ajaxTestService的Bean中的toUpperCase方法,刚好匹配上面的定义。
@Expose不仅可以定义在方法上,也可以定义在类上。@Expose定义在类上表示自动暴露该类中所有的public方法,您就不必再在每个方法上添加@Expose标注了。同时您还可以在此基础上使用@Unexpose将其中的某几个方法再此定义成不暴露。
此服务方法传入参数对应Action的parameter属性,返回值对应Action的returnValue。当然,在未来的使用过程中,Ajax操作的传入参数和返回信息并不总是像本例一样简单。对于更加复杂的情况我们会在后面的例子中进行介绍。
batchable
默认模式下,AjaxAction支持自动合并功能:就是说在某个时间段中如果多次发出AjaxAction请求,Dorado会自动将这些Ajax请求打包合并,将多次Ajax请求合并为一个Ajax请求,从而减少HTTP请求的次数,提高运行效率。
但凡事有例外,在某些特殊情况下我们如果希望这个AjaxAction要独立处理,就可以通过设置batchable属性为false.
supportsEntity
是否支持Dorado的数据实体。
如果选择是,那么当有数据从服务端返回时,系统自动判断该数据在服务端的形态。 如果该数据在服务端是Entity/EntityList的形式,那么系统也会在客户端将他们转换成Entity/EntityList的形式。
如果选择否,那么不管这些数据在服务端是怎样的,到了客户端将变成JSON形式。
timeout
以毫秒为单位的超时时长。此特性在同步模式下不生效。
modal
默认情况下AjaxAction执行时会有一个系统提示框
如果想关闭这个默认的提示框,可以将modal属性设置为false