java - SmartGWT - 重写 tranformRequest 和 transformResponse

标签 java gwt datasource smartgwt

我正在 GWT 中使用 SmartGWT 在 GAE 上编写一个项目。

我有一个带有对象的数据库,每个对象都有一个“父亲”对象和“儿子”,我使用 TreeGrid 来表示它们。我已经有一个 GWT-RPC 服务来获取给定节点的子节点。

我现在需要的是以某种方式扩展 DataSource 类 s.t 当打开树节点时,我将能够使用我自己的服务来获取它的儿子 - 然后将它们作为 TreeGrid 可以使用的东西返回。

我知道我应该重写transformRequest和transformResponse,但我不知道如何重写。任何代码示例/解释将不胜感激!

这是我到目前为止所得到的 - 不确定它是否正确:

              budgetTree.setDataSource(new DataSource() {

            @Override
            protected Object transformRequest(final DSRequest dsRequest) {

              expensesService.getExpensesByYear(2008,
                  new AsyncCallback<ExpenseRecord[]>() {

                    @Override
                    public void onSuccess(ExpenseRecord[] result) {
                      System.out.println("Returned " + result.length + " expense record ");            
                      dsRequest.setAttribute("dsResult", result);
                    }

                    @Override
                    public void onFailure(Throwable caught) {
                      System.out.println("Failed to run query");
                    }

                  });

              return dsRequest;
            }

            @Override
            protected void transformResponse(DSResponse response, DSRequest request,
                Object data) {    
              Record[] recs = request.getAttributeAsRecordArray("dsResult");
              response.setData(recs);
              super.transformResponse(response, request, data);
            }


          });

最佳答案

由于您自己执行实际请求,因此您首先需要查看 setDataProtocol(DSProtocol.CLIENTCUSTOM);

然后在 onSuccessonFailure 中,您需要调用 processResponse() ,它将调用 transformResponse()

public class MyDatasource extends DataSource{
    public MyDatasource(){
        setDataProtocol(DSProtocol.CLIENTCUSTOM)           
    }

    @Override
    protected Object transformRequest(final DSRequest dsRequest) {

          expensesService.getExpensesByYear(2008,
              new AsyncCallback<ExpenseRecord[]>() {

                @Override
                public void onSuccess(ExpenseRecord[] result) {
                  DSResponse response = new DSResponse();
                  System.out.println("Returned " + result.length + " expense record ");            
                  dsRequest.setAttribute("dsResult", result);
                  Record[] recs = request.getAttributeAsRecordArray("dsResult");
                  response.setData(recs);
                  processResponse(dsRequest.getRequestId(), dsResponse);
                }

                @Override
                public void onFailure(Throwable caught) {
                  DSResponse response = new DSResponse();
                  System.out.println("Failed to run query");
                  processResponse(dsRequest.getRequestId(), dsResponse);
                }

              });

          return dsRequest;
   }

}

关于java - SmartGWT - 重写 tranformRequest 和 transformResponse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8957030/

相关文章:

java - 线程 "main"java.lang.NoClassDefFoundError : junit/textui/ResultPrinter 中的异常

未找到 javax.persistence.EntityManager 源代码

java - 如何在基于 GWT 的项目中包含本地 Java 程序?

java - 在 Eclipse 中从 SVN 服务器 checkout GWT 项目?

java - 如何跨所有执行上下文在 play 框架日志中记录请求 ID

java - 在 java 中以 MapReduce 模式启动 Pig 服务器

java - 使用 AbstractRoutingDataSource 并尝试设置多个数据源时出现 Spring 引导错误

java - 如何在 spring 中覆盖 JndiObjectFactoryBean 并在 java 中设置解密密码

javascript - 将 kendo grid DataSourceRequest 从 javascript 传递到 ASP.NET

java - 在复合构建中使用本地 gradle 插件,使用 groovy 约定脚本