SmartGWT无法解析DataSource.transformResponse()方法中的数据

时间:2016-03-24 15:12:34

标签: gwt javascript-objects smartgwt

我需要一些帮助...

我正在使用支持GWT的Web应用程序。我正在使用gwt-2.3.0 SDK。

我有一个扩展DataSource类并使用transformResponse方法的方法:

public class DeathRecordXmlDS extends DataSource { 

 protected void transformResponse(DSResponse response, DSRequest request, Object data){
     super.transformResponse(response, request, data);
 } 

}

据我所知,transformResponse()方法应该获得控制权,此时,我将可以访问提供给我的应用程序的客户端的数据。我正在尝试使用传入的Object数据参数(第三个参数)。

我希望传入XML格式的字符串.XML将包含我需要访问和使用的数据(计数字段)。

我似乎没有获得XML字符串。这就是我所知道的......

我确实看到XML数据被传递给我的webapp(客户端)。我可以看到这个,因为我检查了我正在使用的网页,我看到了响应数据。以下是我希望收到的一些例子:

XML data from Query:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Collection numRecords="0">
    <DeathRecords/>
</Collection>

上述XML有效(我在Validator中检查过)。这是一个没有数据(无死亡记录)返回到我的应用程序的情况。 numRecords XML属性设置为“0”。当然,如果我确实有记录返回,numRecords将包含记录数量,我将获得相同数量的DeathRecord节点。

我没有在transformResponse()方法中获得上述数据(或者,我不知道如何使用它)。

这是我为了解决这个问题所做的工作......

Object数据参数......它是一个JavaScriptObject。我知道这是因为我在它上面做了一个.getClass()。getName():

DeathRecordXmlDS::transformResponse()      data.getClass().getName(): com.google.gwt.core.client.JavaScriptObject$

然后,为了尝试使用它,我将其转换为String:

        com.google.gwt.core.client.JavaScriptObject dataJS = (com.google.gwt.core.client.JavaScriptObject)data;
    System.out.println("DeathRecordXmlDS::transformResponse()     data as a JavaScriptObject: "+dataJS.toString());

格式化为String的'data'内容如下:

DeathRecordXmlDS::transformResponse()     data as a JavaScriptObject: [XMLDoc <Collection>]

因此,看起来我有一些与我的'Collection'节点有关的东西,但不是我可以解析并获得我的numRecords属性的XML数据字符串。

我需要做什么才能在transformResponse()方法中访问XML?

谢谢!

2 个答案:

答案 0 :(得分:0)

我认为您的数据对象已经转换为javascript集合。

也许您可以使用实用程序类XMLTools来检索numRecords信息:

Integer numRecords = Integer.parseInt(XMLTools.selectString(data, "Collection/@numRecords"));

答案 1 :(得分:0)

在对此工作一段时间后,我能够读取我正在使用的XML数据。我使用了以下代码:

    try{
        JsArray<JavaScriptObject> nodes = ((JavaScriptObject) XMLTools.selectNodes(data, "/Collection/@numRecords")).cast();

        for (int i = 0; i < nodes.length(); i++) {
          com.google.gwt.dom.client.Element element = (com.google.gwt.dom.client.Element) nodes.get(i);

          numRecords = element.getNodeValue();
        }

    } catch(Exception e){
        //  If Parsing fails, capture the exception 
        System.out.println("DeathRecordXmlDS::transformResponse()     Not able to parse the XML");  
    }

我认为解决这个问题的第一步是理解Object类型的参数'data'实际上是一个JavaScriptObject。我在查看.getClass()和.getName()之后了解到了这一点。这有助于我了解我的工作内容:

System.out.println("DeathRecordXmlDS::transformResponse()     data.getClass().getName(): "+data.getClass().getName());

一旦我知道它是一个JavaScriptObject,我就可以更专注于谷歌搜索我想要完成的事情。我有点惊讶XMLTools.selectNodes()函数的工作方式,但最终的结果是我能够读取numRecords属性。

感谢您的建议!