使用 Grails 构建富 Internet 应用程序,第 2 部分: Grails 和 Google Web Toolkit
2009-11-19 00:00:00 来源:WEB开发网当加载页面时将调用 onModuleLoad 方法。在本例中,它将创建一个搜索表单,该表单有一个用于输入标记的文本框,一个用于选择类别的下拉列表,以及一个用于请求搜索的搜索按钮。它还创建一个空面板,用于显示搜索结果。单击搜索按钮将调用搜索方法。清单 5 给出了搜索方法的代码。
清单 5. DiggApp 搜索方法private final void search(String tag, String category){
resultsPanel.clear();
Story.search(tag, category, new RequestCallback(){
public void onError(Request request, Throwable exception) {
Label label = new Label("Sorry there was an error");
resultsPanel.add(label);
}
public void onResponseReceived(Request request, Response response) {
List<Story> stories = Story.fromJson(response.getText());
SearchTable grid = new SearchTable(stories);
resultsPanel.add(grid);
}
});
}
代码对 Story 类使用了搜索方法。Story 类用作系统中的模型,它非常类似于本系列第 1 部分在 Flex 应用程序中创建的 Story 类。它有一个静态搜索方法,并充当一个数据模型。该类的代码如清单 6 所示。
清单 6. Story 类public class Story {
private static final String BASE_URL = "/digg/api/search?";
private int id;
private String link;
private String title;
private String description;
private String tags;
private String category;
private int votesFor;
private int votesAgainst;
public Story(JSONObject obj){
id = (int) obj.get("id").isNumber().doubleValue();
link = obj.get("link").isString().stringValue();
title = obj.get("title").isString().stringValue();
description = obj.get("description").isString().stringValue();
tags = obj.get("tags").isString().stringValue();
category = obj.get("category").isString().stringValue();
votesFor = (int) obj.get("votesFor").isNumber().doubleValue();
votesAgainst = (int) obj.get("votesAgainst").isNumber().doubleValue();
}
public static void search(final String tag, final String category, final
RequestCallback callback){
String url = buildRequest(tag, category);
RequestBuilder builder =
new RequestBuilder(RequestBuilder.GET, url);
try {
builder.sendRequest(null, new RequestCallback(){
public void onError(Request request, Throwable exception) {
callback.onError(request, exception);
}
public void onResponseReceived(Request request, Response response) {
callback.onResponseReceived(request, response);
}
});
} catch (RequestException e) {
callback.onError(null, e);
}
}
}
更多精彩
赞助商链接