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