2012-01-21 8 views
0

私はGWTでSmartGWTを使用してGAEでプロジェクトを書いています。SmartGWT - tranformRequestとtransformResponseをオーバーライド

私は、それぞれが "父"オブジェクトと "息子"を持つオブジェクトを持つDBを持っており、それらを表現するためにTreeGridを使用しています。私はすでにGWT-RPCサービスを持っており、与えられたノードの子を取得します。

私が今必要とするのは、ツリーノードが開かれたときに何らかの形でDataSourceクラスを拡張することです。私自身のサービスを使用して息子をフェッチしてから、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); 
      } 


      }); 

答えて

1

あなたが実際の要求を自分で行っているので、あなたが最初の両方に続いて setDataProtocol(DSProtocol.CLIENTCUSTOM);

を見てする必要がありますonSuccessonFailureあなたが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; 
    } 
を呼ぶであろう processResponse()を呼び出す必要があります

}

+0

ありがとうございます!私はデフォルトのtransformResponse関数を使うべきですか、それともそれをオーバーライドする必要がありますか? – Yossale

+0

transformResponse()をオーバーライドする必要がないレスポンスをさらに変換しない場合は、 – Abhijith