Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SmartGWT-重写TransformRequest和transformResponse_Java_Gwt_Datasource_Smartgwt - Fatal编程技术网

Java SmartGWT-重写TransformRequest和transformResponse

Java SmartGWT-重写TransformRequest和transformResponse,java,gwt,datasource,smartgwt,Java,Gwt,Datasource,Smartgwt,我正在用SmartGWT通过GAE在GWT上写一个项目 我有一个带有object的DB,每个DB都有一个“父”对象和“子”,我用一个TreeGrid来表示它们。我已经有了一个GWT-RPC服务,它可以获取给定节点的子节点 我现在需要的是以某种方式扩展DataSource类s.t当一个树节点打开时,我将能够使用我自己的服务去获取它的子节点,然后将它们作为TreeGrid可以处理的东西返回 我知道我应该覆盖transformRequest和transformResponse,但我不知道如何覆盖。任何

我正在用SmartGWT通过GAE在GWT上写一个项目

我有一个带有object的DB,每个DB都有一个“父”对象和“子”,我用一个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);
            }


          });
budgetTree.setDataSource(新数据源(){
@凌驾
受保护对象转换请求(最终DSRequest DSRequest){
ExpenseService.GetExpensesByear(2008年,
新的AsyncCallback(){
@凌驾
成功时公开作废(ExpenseRecord[]结果){
系统输出打印项次(“返回”+结果长度+“费用记录”);
setAttribute(“dsResult”,result);
}
@凌驾
失败时的公共无效(可丢弃){
System.out.println(“无法运行查询”);
}
});
返回请求;
}
@凌驾
受保护的无效转换响应(DSResponse响应、DSRequest请求、,
对象数据){
Record[]recs=request.getAttributesRecordArray(“dsResult”);
响应。设置数据(recs);
super.transformResponse(响应、请求、数据);
}
});

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

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

公共类MyDatasource扩展了DataSource{
公共MyDatasource(){
setDataProtocol(DSProtocol.CLIENTCUSTOM)
}
@凌驾
受保护对象转换请求(最终DSRequest DSRequest){
ExpenseService.GetExpensesByear(2008年,
新的AsyncCallback(){
@凌驾
成功时公开作废(ExpenseRecord[]结果){
DSResponse=新的DSResponse();
系统输出打印项次(“返回”+结果长度+“费用记录”);
setAttribute(“dsResult”,result);
Record[]recs=request.getAttributesRecordArray(“dsResult”);
响应。设置数据(recs);
processResponse(dsRequest.getRequestId(),dsResponse);
}
@凌驾
失败时的公共无效(可丢弃){
DSResponse=新的DSResponse();
System.out.println(“无法运行查询”);
processResponse(dsRequest.getRequestId(),dsResponse);
}
});
返回请求;
}

}

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

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

公共类MyDatasource扩展了DataSource{
公共MyDatasource(){
setDataProtocol(DSProtocol.CLIENTCUSTOM)
}
@凌驾
受保护对象转换请求(最终DSRequest DSRequest){
ExpenseService.GetExpensesByear(2008年,
新的AsyncCallback(){
@凌驾
成功时公开作废(ExpenseRecord[]结果){
DSResponse=新的DSResponse();
系统输出打印项次(“返回”+结果长度+“费用记录”);
setAttribute(“dsResult”,result);
Record[]recs=request.getAttributesRecordArray(“dsResult”);
响应。设置数据(recs);
processResponse(dsRequest.getRequestId(),dsResponse);
}
@凌驾
失败时的公共无效(可丢弃){
DSResponse=新的DSResponse();
System.out.println(“无法运行查询”);
processResponse(dsRequest.getRequestId(),dsResponse);
}
});
返回请求;
}

}

谢谢!我应该使用默认的transformResponse函数,还是也需要重写它?如果不进一步转换响应,则不需要重写transformResponse()。谢谢!我应该使用默认的transformResponse函数,还是也需要重写它?如果不进一步转换响应,则不需要重写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;
   }