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

SmartGWT not able to parse data in the DataSource.transformResponse() method

我需要一些帮助...

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

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

public class DeathRecordXmlDS extends DataSource { 

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

}

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

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

我似乎没有收到 XML 字符串。这是我所知道的...

我确实看到 XML 数据被传递到我的网络应用程序(客户端)。我可以看到这一点,因为我检查了我正在使用的网页并且看到了响应数据。这是我希望收到的东西的示例:

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$

然后,为了尝试使用它,我将它转换为字符串:

        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());

格式化为字符串的 'data' 的内容如下所示:

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

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

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

谢谢!

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

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

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

再处理一段时间后,我能够读取我正在处理的 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");  
    }

我认为解决这个问题的第一步是理解对象类型的参数 'data' 实际上是一个 JavaScriptObject。我在查看 .getClass() 和 .getName() 后了解到这一点。这帮助我理解了我在做什么:

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

一旦我知道它是一个 JavaScriptObject,我就能够更加专注于 Google 搜索我想要完成的目标。我对 XMLTools.selectNodes() 函数的工作方式感到有点惊讶,但最终结果是我能够读取 numRecords 属性。

感谢建议!