(JimStoneAjax交流群:366984517)
DWR是Ajax实现RIA一时无二的王者,它强大厚重并且饱经磨练。JimStoneAjax是同领域的新秀,灵活、轻巧且使用方便。
JimStoneAjax可以跟DWR竞争嘛?答案是肯定的!我们来看看它有哪些优点竟然能够跟DWR匹敌。
1、配置简单甚至无配置
JimStoneAjax 配置简单,甚至您可以不需要进行任何配置。
使用JimStoneAjax默认情况下是不需要任何配置的,根据使用环境,您可能希望自定义客户端生成JS和执行JS方法的访问路径,那么您就需要配置URL对脚本的访问路径。
2、编写Serivce无需配置即可在客户端直接调用
也许大家同时会想到这个里边的最关键的问题就是这样安全性一定很差劲。但是恰恰相反,JimStoneAjax 巧妙的利用接口实现来屏蔽无关对象,只有实现自ISTAjaxModel接口的类才被标识为“有效类”。
那么同样的问题,一个Java对象可能包含很多方法,不配置那岂不是方法全暴漏了!同样这样的担心也是没必要的,因为它当前通过泛型返回值来绝对方法的有效性!不用担心,JimStoneAjax规定只有返回类型为STDataResult和STAjaxView的方法才被允许被调用。
STDataResult对象适用于大部分方法返回结果。它是一个饱经验证的泛型类,能够适用与所有的场景,并且能够完美的给用户提供更加详细的方法反馈结果。主要属性包含成功与否状态stat,错误代码errCode(用于国际化和精确定位),方法返回说明message,返回数据datas。创建方法包含多种多样,且非常灵活和可靠。
public STDataResult<Integer> maxFromArray(Integer[] list) { int count = list.length; int max = Integer.MIN_VALUE; for (int i=0; i<count; i++) { if (list[i] > max) { max = list[i]; } } return STDataResult.succByMessage("max from array success",max); }这个方法会被识别为有效方法,在生成JS时可以直接调用这个方法。
所以根本不需要进行任何配置,实现了ISTAjaxModel接口的类将自动被识别并动态生成JS引用。
3、支持项目当前环境中默认的控制器渲染结果作为返回值
这个功能充满创意并且真的很酷。
刚才我们曾经提到过 STAjaxView 对象,这个对象神奇的地方在于,他能够自动的融入Spring MVC、Struts控制器等本地系统环境,您编写的Service返回值可以等同于Controller中方法的返回值,使用本地控制器渲染器自动渲染页面结果,并且客户端接收的数据为渲染之后的页面结果,So cool!
public STAjaxView getPageTop(HttpServletRequest request,HttpServletResponse response) { request.setAttribute("name","JimStone"); return render( "/test/top","email","boychong2@126.com","qq","123581766","mobile","15221869351" ); }
客户端调用后,返回数据将为融入本地环境的渲染后的页面。客户端此时接收到的返回数据直接是页面HTML内容。
testAjaxModel2.getPageTop('request','response',function(html){ $('#test-get-page-top').html(html); });
4、方法参数调用灵活,支持传递request、response和自定义对象
JimStoneAjax的框架设计非常灵活,您可以自定义参数传递和转换方法。
通过上一个代码片段我们看到,参数的传递包含了request和resonse。这样我们在使用过程中基本上能够处理网络应用中更多的复杂情况。同时支持自定义参数转换方法,您可以编写自己的方法转换方法去更好的扩展功能。
如果您需要传递自定义对象,您需要实现接口ISTMethodParamLoader,并且加入配置项jsajax.class.serviceLoader。
如果项目没有使用Spring,那么您需要在配置文件中更换参数加载器为jsajax.class.methodParamLoader=com.jimstone.ajax.loader.STSimpleMethodParamLoader。如果需要热部署或使用JRebel则请更换加参数加载器为STSpringMethodParamLoader。
5、天生支持Spring和Spring MVC,同时支持自己创建的JavaBean对象
天生亲和Spring MVC,但同时也可以不依赖Spring环境,您完全可以根据本地使用场景自定义Ajax模块创建接口,更好的融入本地环境。优雅的设计让您的程序更加灵活和松耦合。
让我们来看一个提供给客户端调用的Service类示例。
@Service("testAjaxModel1") public class TestAjaxModel1 implements ISTAjaxModel { public STDataResult<Integer> min(Integer x,Integer y) { int ret = (x < y) ? x : y; return STDataResult.succByMessage("success min",ret); } public STDataResult<List<Integer>> getRandomList(Integer minNum,Integer maxNum,Integer count) { int num; List<Integer> list = new ArrayList<Integer>(); for (int i=0; i<count; i++) { num = minNum + Double.valueOf(Float.valueOf(maxNum - minNum) * Math.random()).intValue(); list.add(num); } return STDataResult.succByMessage("success random list",list); } }
这是一个使用Spring注解创建的Service,这个类在没有任何配置的情况下就可以在客户端直接调用,客户端引用方法也很简单。
@H_404_174@<ajax:script value="testAjaxModel1"></ajax:script> 这样客户端就能够直接使用了。当然也支持同时加载多个模块。
如果您需要自定义JavaBean对象的获取方式,需要实现接口ISTServiceLoader,并且加入配置项jsajax.class.serviceLoader。
6、生成JS文件体积极小并且支持客户端缓存,可以自定义JavaScript生成规则
JimStoneAjax 生成的JS文件体积非常小巧,并且生成的JS文件能够自动被浏览器缓存住。如果您开发环境使用JRebel或者服务器支持热部署,那么没有关系,它会根据class文件编译修改时间自动更新缓存。
默认提供生成的JS如果不能满足您的需求,您完全可以定义自己的JS生成器。需要实现ISTAjaxJavascriptMaker接口,并且加入配置项jsajax.class.jsMaker。
它的JSTL标签只有三种:
综上所述,JimStoneAjax 比 DWR 更加轻量、方便和灵活。
更多信息可以下载示例或去JimStoneAjax官网查看。