2016-03-24 1 views
0

内のデータを解析することSmartGWTができない私はGWT対応のWebアプリケーションで働いているいくつかの助けてください...DataSource.transformResponse()メソッド

を必要としています。私はgwt-2.3.0 SDKを使用しています。私が理解したよう

public class DeathRecordXmlDS extends DataSource { 

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

} 

、transformResponse()メソッドは、コントロールを取得する必要がありますし、この時点で、私はデータにアクセスする必要があります。

私は、DataSourceクラスを拡張し、transformResponseメソッドを使用する方法を持っています私のアプリケーションのクライアント側に提供されています。渡されるオブジェクトデータパラメータ(3番目のパラメータ)を処理しようとしています。

XML形式の文字列が渡されることを期待しています。XMLには必要なデータ(カウントフィールド)が含まれていますアクセスと使用。

私はXML文字列を取得していないようです。ここに私が知っているものがあります...

XMLデータが私のwebapp(クライアント)に渡されています。これは、私が作業しているWebページを調べて、Responseデータが表示されていることからわかります。

XML data from Query: 

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

上記のXMLは有効です(バリデーターでチェックしました)。これは、アプリケーションにデータ(No Death Records)が返されなかった場合です。 numRecords XML属性は "0"に設定されています。もちろん、レコードが返された場合、numRecordsにはレコード数が格納され、同じ数のDeathRecordノードが取得されます。

私はtransformResponse()メソッドで上記のデータを取得していません(または、それを使用する方法がわかりません)。

はここ

オブジェクトデータパラメータは...それはJavaScriptObjectです...私はこれを理解しようとやったものです。 。

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

次に、それを仕事にしようとする、私は文字列に変換::私は、私はそれに.getClass()のgetName()をやったので、これを知っている

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

内容文字列のように見えるようにフォーマット「データ」の:だから

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

、それは私が解析し、取得することができ、XMLデータの文字列私は私の「コレクション」ノードに関係している何かを持っているように見えるが、ありません私のnumRecords属性。

transformResponse()メソッドでXMLにアクセスするには、何が必要ですか?

ありがとうございます!

答えて

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型のパラメータのデータが本当にJavaScriptObjectだったと理解したと思います。 .getClass()と.getName()を見て、これを学びました。

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

私はそれがJavaScriptObjectを知っていたならば、私は私が達成しようとしていた何のためにGoogle検索のもう少し集中を行うことができました:これは私が私が働いていたかを理解助けました。私はXMLTools.selectNodes()関数がやったように機能していたのに少し驚いていましたが、最終結果はnumRecords属性を読み取ることができたことです。

ありがとうございました!

0

あなたのデータオブジェクトはすでにjavascriptコレクションに変換されていると思います。

たぶん、あなたはあなたのnumRecordsの情報を取得するためのユーティリティクラスXMLToolsを使用することができます。

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

私が使用しているコードでは、あなたが言及したXMLToolsの機能を使用していることに言及しませんでした。私はそれが(私は仮定)が動作するために使用されたと信じていますが、今、selectString関数は空の文字列を返します。私はちょうどうまくいきません。私は問題を解決する新しい方法(numRecords値を読む)を探していました。おそらくXML構造を反復処理します。 – SBParks

+0

私は同じ問題に遭遇しました。私のプロジェクトの既存のコードは、XMLToolsを使って作業に使用されたrawDataパラメータから直接文字列を選択することを意味しますが、私の使い方では、XMLが正しくフォーマットされていてもnullを返します。生のXMLデータをJSOに変換するのではなく、保存するために何かを指定する必要があるかどうかを知りたいと思っています。 – Tom

関連する問題