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 属性。
感谢建议!
我需要一些帮助...
我正在使用支持 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 属性。
感谢建议!