2009-04-08 10 views
6

GWTを使用してBeanを文字列にシリアライズする最も簡単な方法は何ですか?私はGWT.create()呼び出しを使用しないことを好む。GWTでオブジェクトをシリアライズ

+0

文字列のどのようなことをいっているのですか"property = value"のペアのリスト? –

+1

元のインスタンスに前後に変換できる限り、任意の種類の文字列。 –

答えて

4

免責事項: URLでBeanをシリアライズすることは、GWTにとってはあまりお勧めできません。私は、URLにデータを置く必要がある場合、できるだけ少なく、ページの状態を復元するために必要なものだけを知っていることを学びました。 Gmailでの履歴トークンの使い方を見てみると、Gmailの履歴トークンはごくわずかです。道のうち、その免責条項付

私は私に取り組んでGWTプロジェクトの場合は、単純に区切り文字で区切られた豆の値を書きました。値を読み込む際に、String.split()メソッドを使用して配列を取得しました。その配列では、値を正しいBeanプロパティに割り当てます。コード内:

public class Sample { 

    private int a; 
    private boolean b; 
    private String c; 
    //getters and setters for fields not shown 

    public String toHistoryToken(){ 
     return a+"/"+b+"/"+c; 
    } 
    public void fromHistoryToken(String token){ 
     String[] values=token.split("/"); 
     a=Integer.parseInt(values[0]); 
     b=Boolean.parseBoolean(values[1]); 
     c=values[2]; 
    } 
} 

さらに複雑なシナリオでは、もっと複雑なことが必要な場合があります。たとえば、ネストされたオブジェクトの場合、値を子オブジェクトに渡すコードを記述する必要があります。

また、使用する値に区切り文字が含まれていないことを確認する必要があることに注意してください。文字列に "/"が含まれていることがわかっている場合は、入れ子の区切り文字をエスケープするためにreplace()操作を行う必要があります。

0

おそらくこれはあなたが探しているものですか?

:あなたはこれを(右豆からJSON文字列に行く)を行うことができます

http://json-lib.sourceforge.net/

Json <-> Java serialization that works with GWT

拡張版:JSON-libのライブラリを使用して

http://json-lib.sourceforge.net/snippets.html#Creating_a_JSONObject_from_a_JavaBean

+0

そういうものですが、私のすべてのクラス(40+)にオーバーレイタイプを書いてはいけません。オブジェクトをStringにシリアライズするシンプルで非介入的な方法が欲しいです。 –

+0

非侵入型は相対的なものです。私が渡す予定のすべてのデータに対してオーバーレイタイプを作成することを検討していますが、BeanからJSON文字列オブジェクトに直接ハッキングする方法が必要な場合は、私の更新を確認してください。 – Organiccat

+0

json-libはGWT(クライアント側)では動作しないと確信しています。おそらく、BeanInfoを通してリフレクションを使用するからです。私は今すぐソースを確認することはできません。 –

1

私はあなたが最終的に達成しようとしていることを理解していません。

文字列を前後に送信したい場合は、実際に何かを実行する必要はありません。 - 通常のGWT RPCメカニズムを使用して無料で取得できます。 java.lang.Stringを返すメソッドを作成し、それに伴う実装とAsyncインターフェイスを作成すれば完了です。

一方、本当にBeanを送信したい場合は、ゼロ引数のコンストラクタがあり、SerializableまたはIsSerializableを実装していることを確認してください。

+0

URLバーに簡単にBeanを吐き出すことができます。 –

+0

ミゲルが上記のように、GWTには反映されていません。カスタムの "toUrl()"メソッドを作成する方が良いかもしれません。 –

0
は、いくつかのことを複雑にGWTのニュアンスが、一般的のようなものがあるかもしれません

:JSONでこの

  • を行うことができますJAXBXStreamなどの

    • XMLデータバインディング/マッピングlibsに、Jacksonのようなライブラリが行うことができますJAXBに似ていますが、より少ない設定(そして、それがまったく重要であれば、より速いスピード)で、フレキシブルなフルビーンバインディングを提供します。

    が有効です。

  • +0

    これらのライブラリはおそらくGWTクライアント側では使用できないリフレクションを使用するため、これはカットされません。 –

    0

    最終的にGWTは(Javaで書かれていても)JavaScriptで動作しています。その意味では、 "Java Bean"はクライアントで簡単に見つかるものではありませんが、サーバーでは(Javaの場合)正常に動作します。

    実際にはメソッドなしのオブジェクトであるということを受け入れるならば、そのオブジェクトを使用する際の基本的な意図はデータの移動です。 JavaScriptをネイティブに使用するJSONは、データの非常に柔軟なコンテナとしても機能します。サーバー側では、Beanの配列はBeanUtilsを使用してJSONに変換することができます。 JSONはGWTで文字列としてシリアル化することができ、GWTにはJSONをクライアントのJavaScriptオブジェクトに変換するパーサがあります。

    おそらくこれを行うのは簡単な方法ではありませんが、作業を開始すると非常に柔軟です。

    関連する問題