GWT を使用して Bean を文字列にシリアル化する最も簡単な方法は何ですか? 私はGWT.create()呼び出しを使用しないことを好みます。
6 に答える
免責事項: URL で Bean をシリアライズすることは、GWT にとってあまり良い考えではありません。URL にデータを配置する必要がある場合は、できるだけ少なくし、ページの状態を復元するために必要なものだけにする必要があることを学びました。Gmail が履歴トークンをどのように使用しているかを見ると、それが非常に最小限であることがわかります。
その免責事項を邪魔しないで:
私が取り組んだ GWT プロジェクトでは、Bean の値を区切り記号で区切って単純に書き出しました。値を読み戻すときは、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() 操作を実行して、ネストされた区切り文字をエスケープする必要があります。
あなたが最終的に達成しようとしていることを理解しているかどうかはわかりません。
本当に文字列をやり取りしたいだけなら、何もする必要はありません。通常の GWT RPC メカニズムを使用して無料で取得できます。を返すメソッドをjava.lang.String
作成し、付随する実装と Async インターフェイスを作成するだけで完了です。
一方、本当に Bean を送信したい場合は、引数なしのコンストラクターとSerializable
orを実装していることを確認してIsSerializable
ください。
私が見つけた最も近いものはこれでした:
最終的に、GWTはJavaScriptで実行されます(Javaで記述されている場合でも)。その意味で、「Java Beans」はクライアントで簡単に見つけることができるものではありませんが、サーバー(Javaの場合)では正常に機能します。
Beanが実際には単なるメソッドレスオブジェクトであることに同意する場合、Beanを使用する目的は、データを移動することです。JavaScriptでネイティブに、JSONはデータの非常に柔軟なコンテナーとしても機能します。サーバー側では、Beanの配列をBeanUtils(および少しのトラバーサル)を使用してJSONに変換できます。JSONはGWTで文字列としてシリアル化でき、GWTにはJSONをクライアントのJavaScriptオブジェクトに変換するパーサーがあります。
これを行うのはおそらく最も簡単な方法ではありませんが、機能させると非常に柔軟になります。
多分これはあなたが探しているものですか?
Json <-> GWT で動作する Java シリアライゼーション
拡張版:
Json-lib ライブラリの使用:
http://json-lib.sourceforge.net/
これを行うことができます(Beanからjson文字列に直接移動します):
http://json-lib.sourceforge.net/snippets.html#Creating_a_JSONObject_from_a_JavaBean