使用Ajax技术需要写后台业务类,并将业务类添加到spring容器中(Dorado已经集成了spring),在需要加入spring容器的类上加上组件注解@Component,同时在app-context.xml中配置注解扫描,表示spring容器将在启动是扫描该包下的所有注解,同时将扫描到的对象加入IOC容器中。
补充:@Expose标记是Dorado7专门提供的标注,用于定义可暴露服务,根据这个规则Dorado7会将这个方法自动注册在 ExposedServiceManager中,其中服务名为:systemInfoService,服务表达式 为:systemInfoService#getSystemInfo。服务名就是SystemInfoService.java在BeanFactory中注册的bean的id,annotation机制会自动将Ajax的S自动转换为小写字母。
至此,后台服务就创建完成。
前台如何调用后台写好的服务方法呢?
新建Dorado表现层视图文件,在viewConfig中的view目录下新建AjaxAction控件,设置控件id,其他控件通过该id调用该控件,executingMessage设置正在请求中的提示,successMessage设置请求成功的提示,service属性中设置的值,称之为服务定位表达式,在Dorado7中服务定位表达式是用来描述服务的查找方式,即Dorado7通过服务定位表达式来查找到具体服务,以便于对服务进行调用。systemInfoService为注册到spring容器beanFactory中的beanId,getSystemInfo为方法名。
AjaxAction执行成功后,应该获取后台方法的返回值并对前台控件赋值,因此需要对ajaxactionGetSysInfo绑定onSuccess事件。
方式一、
self表示ajaxactionGetSysInfo这个控件自身,returnValue为AjaxAction控件的属性字段,表示Ajax调用结束后Java层返回的结果。由于 Ajax方法返回的是一个Map对象,在JS中会自动转为JSON对象,这样就可以直接通过 info.product,info.veneor,info.version访问map中的内容。
#labelProduct表示当前页面的labelProduct控件。
view.set("#labelProduct.text","产品:"+info.product);这句代码则表示设置当前页面控件Id为labelProduct的text属性为后台方法的相应返回值。
方式二、我们也可以将labelProduct,labelVendor,labelVersion,labelTime这四个控件Id作为参数传递到onSuccess方法中,然后在事件中通过控件Id直接引用控件对象。优化后的代码如下图:
通过一个按钮控件调用该Ajax控件,只需要将按钮控件的行为action设置为AjaxAction控件Id就OK。
运行结果:
点击按钮前点击按钮后