1

LCDS と Flex を使用しています。Java から Flex にオブジェクトを送信するときに、すべてのプロパティを送信したくありません。私の知る限り、シリアライズしたくない場合は、変数をトランジェントにします。

例えば。

 private transient Date birthDate;

 public Date getBirthDate(){  
    return birthDate;
 }

 public void setBirthDate(Date val){
    birthDate = val;
    //Some code here.
 }

これで、シリアル化されたオブジェクトに生年月日が含まれなくなりました。しかし、AMF ログを見ると、オブジェクトには生年月日と値が含まれています。
シリアライゼーションはコードを調べて、プライベート変数が一時的であることを確認しますか? (プライベート プロパティにアクセスする方法がわかりません。少し混乱しています。)
変数をパブリックとしてマークする必要がありますか。ゲッターとセッターは意味がなく、さらにセッターメソッドでいくつかのコードを記述します。なのでセッターが必要です。

質問:

  1. 私は本 (Brain Telintelo による blazed を使用したエンタープライズ フレックス、第 15 章) を読みました。この場合、blazeds はわざわざ私有財産を一時的なものとしてチェックすることさえあります。

  2. 通常のシリアライゼーション ( amf シリアライゼーションではない) がどのように行われ、パブリックなゲッターとセッターがあるにもかかわらず、プライベートな一時変数を追跡するかを説明してください。

  3. Flex/LCDS/BlazeDS 環境で Java 変数をシリアライズしないようにするにはどうすればよいですか。

オブジェクトに 50 ~ 60 個の変数があり、4 ~ 5 個の変数をシリアライズしないでください。そのため、このような大きなオブジェクトに custion Serializer を記述するのは非常に面倒です。そして、私が見るもう1つの欠点は、独自のシリアライザーを作成すると、休止状態がこのオブジェクトを使用できないことです。

4

3 に答える 3

2

普段は (LCDS や Blaze ではなく) Granite Data Services を使用していますが、[Transient] ActionScript タグを使用してみましたか? (もちろん、.as クラスを生成している場合、これは問題になる可能性があります。おそらく @Transient アノテーションがあるのでしょうか?)

http://livedocs.adobe.com/flex/3/html/help.html?content=metadata_3.html

これが機能する方法は、誰が (何を) シリアル化を行っているかによって異なります。たとえば、Granite は Blaze とは動作が少し異なると思います。Granite がプライベート属性をシリアル化するとは思いません (これは間違っている可能性があります)。また、数年前のことを思い出します。Granite 用のカスタム シリアライゼーション クラスを作成しました。これは、'transient' Java キーワード (リフレクションを使用) を持つフィールドを無視するように指示します。

Blaze/LCDS でカスタム シリアライゼーション ロジックを (同じくらい簡単に) 実装できるかどうかはわかりませんが、それも検討する価値があるかもしれません。私がカスタマイズしたのは単一のクラスだけだったので、(あなたが言うように) 大きな苦痛ではありませんでしたが、これが Granite で単純であることだけは確かです。

このためのヘルパー ライブラリが 1 つか 2 つあるかもしれません。男が書いたこのhttp://www.flexpasta.com/index.php/2008/05/19/blazeds-with-annotations-for-remote-objects/は、あなたが求めていることをにやっているようです。(セッターがない場合はシリアライズを強制します。)

于 2011-09-07T22:41:16.383 に答える
1

1 つの Java プロパティを Flex へのシリアル化から除外する場合は、同じ質問への投稿を次に示します: https://stackoverflow.com/a/22328869/244911

于 2014-03-11T14:35:59.260 に答える
0

[Transient] を getter に配置するだけで十分です。setter に配置するのは冗長で冗長であり、コンパイラの警告が再び表示されます。

于 2013-10-02T07:39:59.077 に答える