使用 Google Web Toolkit 和 JSON开发Ajax应用程序
http://tech.ddvip.com 2007年08月25日 社区交流
内容摘要:本文介绍如何使用 Google Web Toolkit(GWT) 和 JSON 开发一个示例 Ajax 应用程序。作者将分别介绍如何在客户端使用 GWT 的 JSON API 来解析和生成 JSON 编码的数据,以及如何在服务器端使用 GWT 的 RemoteServiceServlet 来接受和回复来自客户端的请求,并使用 SOJO 来解析处理 JSON 数据。
清单 9. 使用 UIRefreshTimer 来重复调用函数,时间间隔为 1 秒
Timer t = new UIRefreshTimer(caseNum, suiteNum);
t.scheduleRepeating(1000);运行时,发送的 JSON 编码的请求信息如下:{"caseNum":"3", "testSuites":["TestSuite2","TestSuite3","TestSuite5"]}。
在 RequestCallback 的 onResponseReceived() 方法中处理 HTTP 请求返回的信息。示例程序中,定义了 2 种 callback,分别对应客户端 2 种 HTTP 请求。StartUnitTestRequestCallback 根据返回信息来更新界面状态条的文字。RetrieveRuntimeResultsRequestCallback 会处理当前服务器端已经完成的测试程序的结果信息。返回的测试结果信息已经被服务器端编码为 JSON 格式的字符串。RetrieveRuntimeResultsRequestCallback 将在 onResponseReceived() 方法里使用 GWT 的 JSON 工具解析 JSON 字符串并将结果数据显示在页面上。
客户端使用 GWT 的 JSONParser 来解析返回的 JSON 数据。清单 10 给出了例子,如何实现 Callback 的 onResponseReceived 方法,以及如何转换 JSON 格式字符串为 GWT 的 JSON Java 对象并在界面上显示出来。
清单 10. RetrieveRuntimeResultsRequestCallback 的 onResponseReceived 实现public void onResponseReceived(Request request, Response response) {
if (response.getStatusCode() == 200) {
String respText = response.getText();
//parse JSON encoded string
JSONValue respValue = JSONParser.parse(respText);
JSONArray trArray = respValue.isArray();
if (trArray != null) {
// refresh components
if (trArray.size() == caseNum * suiteNum) {
timer.cancel();
formButton.setEnabled(true);
statusLabel.setText("Test complete !");
formButton.setText("Run Test");
}
// refresh test results ui
resultsGrid.resize(trArray.size(), 4);
for (int i = 0; i < trArray.size(); i++) {
JSONObject tr = trArray.get(i).isObject();
if (tr != null) {
resultsGrid.setWidget(i, 0, new Label(tr
.get("name").isString().stringValue()));
resultsGrid.setWidget(i, 1, new Label(tr.get(
"start").isString().stringValue()));
resultsGrid.setWidget(i, 2, new Label(tr.get("end")
.isString().stringValue()));
resultsGrid.setWidget(i, 3, new Label(tr.get(
"result").isString().stringValue()));
resultsGrid.getCellFormatter().setStyleName(
i,3,z
tr.get("result").isString().stringValue()
.equals("PASS") ? "green" : "red");
}
}
}
} else {
Window.alert("Error occurred - statusCode:"
+ response.getStatusCode());
}
}服务器端 JSON
来源:ibm 作者:邹林志 责编:豆豆技术应用
正在加载评论...