调用REST服务
在Jazz架构模型中Jazz Web Client通过调用Rest Service和后端进行通信,其实质还是使用Ajax异步调用的方式,只不过Jazz做了一层封装,使得异步请求的代码书写更加简洁和通用。Jazz Web UI 通过TeamServerClient接口调用REST服务。例如上文Catalog.js的catalogAction方法调用PetStoreClient来处理REST请求,如果请求成功,则执行_success方法;否则执行 _error方法。PetStoreClient.js是TeamServerClient接口的具体实现如清单12所示:
清单12.
dojo.provide("com.ibm.petstore.web.client.internal.PetStoreClient");
dojo.require("com.ibm.team.repository.web.transport.ServiceRequest");
dojo.require("com.ibm.team.repository.web.transport.TeamServerClient");
(function() {
var ServiceRequest = com.ibm.team.repository.web.transport.ServiceRequest;
var TeamServerClient = com.ibm.team.repository.web.transport.TeamServerClient;
com.ibm.petstore.web.client.internal.PetStoreClient = {
PETSTORE_SERVICE_URI: "com.ibm.petstore.common.service.rest.IPetStoreRestService",
_invokeService: function(responseHandler, method, appArgs){
var actualArgs= {};
if (appArgs) {
var jsonArgs= dojo.json.serialize(appArgs);
actualArgs.jsonString= jsonArgs;
if(appArgs.category) {
actualArgs.category= appArgs.category;
}
}
var serviceRequest = new ServiceRequest(this.PETSTORE_SERVICE_URI, method, appArgs);
TeamServerClient.invokeService(serviceRequest, responseHandler);
},
getAllCategoryDTOs: function(serviceResponseHandler, params){
this._invokeService(serviceResponseHandler, "getAllCategoryDTOs", params);
}
};
})();
PETSTORE_SERVICE_URI声明了将要调用的REST服务。请求参数是JavaScript对象。REST服务执行异步调用,将返回结果通过response handler传递给服务请求者。
测试执行
在Run->Run…中创建一个Jetty launcher,或者直接使用附录工程代码中的PetStore -Server Start.launch文件。在浏览器中输入http://localhost:9080/jazz/web/PetStore访问PetStore页面。其中"web/PetStore"对应于net.jazz.ajax.applications扩展点中所定义的application alias字段。执行结果为:
图3. PetStore执行结果
总结
本文以PetStore的用户界面开发为例,介绍了如何利用Jazz Ajax Framework开发胖客户端 Web UI的过程。通过对JAF的详细阐述和主要开发流程的介绍,可以帮助用户在Jazz平台上快速构建基于Web 2.0的企业级Web应用。
参考资料
Writing a Jazz Web Hello World Page