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