2011-09-07 2 views
1

LCDS 및 Flex를 사용하고 있습니다. 자바에서 Flex로 객체를 전송할 때 모든 속성을 보내지 않습니다. 내가 아는 한, 변수를 일시적으로 직렬화하고 싶지 않으면.플렉스 블레이즈/lcds 임시 변수에 대한 AMF 직렬화

예 :

private transient Date birthDate; 

public Date getBirthDate(){ 
    return birthDate; 
} 

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

이제 직렬화 된 개체에 birthDate가 없어야합니다. 그러나 AMF 로그를 볼 때 개체에 birthDate 값이 있습니다.
직렬화가 코드를 조사하고 개인 변수가 일시적인지 확인합니다 (개인 자산에 대한 액세스 방법을 모르지만 약간 혼란 스럽습니다.)
변수를 public으로 표시해야합니까? 그렇다면 getter와 setter는 의미가 없으며 setter 메서드에서 코드를 작성합니다. 그래서 나는 세터가 필요해.

질문 :

  1. 나는 그 상자 블레이즈 DS에서 유일한 일치 getter 및 setter가 fileds를 직렬화 (뇌 Telintelo, 제 15 장에 의해 블레이즈 DS와 기업 플렉스) 책을 읽을. 이 경우에는 사적인 재산을 일시적으로 확인하는 데에도 큰 어려움이 따릅니다.

  2. 어떤 사람들은 공용 getters와 setter를 가지고 있지만 일반 serializtion (직렬화가 아닌)이 발생하고 private transient 변수를 추적하는 방법을 설명 할 수 있습니까?

  3. Java 변수를 Flex/LCDS/BlazeDS 환경에서 직렬화하지 않으려면 어떻게해야합니까?

개체에 50-60 개의 변수가 있고 4 또는 5 개의 varibales가 serifieszed되어서는 안됩니다. 그래서 큰 물건에 커 스틴 Serializer를 쓰는 것은 큰 고통이다. 그리고 또 다른 단점은 내가 볼 때 내 자신의 serializer를 작성하면 최대 절전 모드가이 개체를 사용할 수 없다는 것입니다.

답변

2

보통 화강암 데이터 서비스 (LCDS 또는 Blaze가 아닌)를 사용하지만 [Transient] ActionScript 태그를 사용해 보셨습니까? (당신이 .as 클래스를 생성하는 경우 물론,이 문제가 될 수있다 - 아마 @Transient 주석있다?)

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

이 작동하는 방식은 누구 (무엇) 직렬화를하고있는에 따라 달라집니다 . 예를 들어 화강암은 블레이즈와 약간 다르게 행동합니다. 나는 Granite가 개인적인 속성을 직렬화한다고 생각하지 않는다. (잘못 생각할 수도있다.) 또한 몇 년 전 회상 해본 결과 화강암에 대한 사용자 지정 직렬화 클래스를 만들었습니다.이 클래스는 '일시적인'Java 키워드 (리플렉션 사용)가있는 필드를 무시하도록합니다.

블레 이즈/LCDS에서 사용자 지정 직렬화 논리를 구현할 수 있는지는 잘 모르겠지만 (물론 쉽게 알 수 있습니다.) 그럴 가치가 있습니다. 그것은 커다란 고통 (당신이 말한 것처럼)은 내가 커스터마이즈 한 단 하나의 클래스이기 때문에 아니지만, 다시 한번 이것은 단순한 w/Granite라는 것을 확실히 알고 있습니다.

도우미 라이브러리가있을 수 있습니다. 그 녀석이 작성한이 http://www.flexpasta.com/index.php/2008/05/19/blazeds-with-annotations-for-remote-objects/은 당신이 무엇을하고있는 것처럼 보입니다 을 역순으로으로합니다. (setter가 없을 때 강제로 직렬화합니다.)

+1

그래, LCDS/블레이즈 DS의 사용자 정의 직렬화가 가능하고, 매우 간단합니다. 나는 FlexPasta 예제 (당신이 저를 때려 눕힘)와 함께 막 게시하려고했습니다. –

0

getter에 [Transient]를두면 충분합니다. setter에 놓는 것은 중복되고 중복되며 컴파일러 경고로 다시 시작됩니다.