使用 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    作者:邹林志    责编:豆豆技术应用

正在加载评论...