flex에서 작업 영역의 상태를 저장 /로드하기 위해 기본 플렉스 직렬화/비 직렬화 프로세스를 사용하려고합니다. 파일을 저장하거나로드하려면 서블릿을 사용해야합니다. 서블릿은 입력 스트림에서 출력 스트림으로 바이트를 반송합니다.FileReference 및 registerClassAlias
직렬화 된 객체 컨테이너 :
public class MyWorkspace {
public var id : String;
public var url : String;
public var objectCollection : ArrayCollection; // Contains MySubObjects
}
직렬화 된 하위 개체 :
public class MySubObject
{
public var name:String;
public var csv:String;
}
비주얼 요소 생성자 :
public function VisualSandbox(){
registerClassAlias("MyWorkspaceAlias", MyWorkspace);
registerClassAlias("MySubObjectAlias", MySubObject);
}
비주얼 요소 이벤트 처리기 여기 내 플렉스 코드의 기본 개요입니다 :
public function onSaveButtonClick(event : MouseEvent) : void
{
var ws : MyWorkspace = new MyWorkspace();
ws.id = "ID";
ws.url = "URL";
ws.objectCollection = new ArrayCollection(veObjCollectionAC.source.slice());
var ba : ByteArray = new ByteArray();
ba.writeObject(ws);
ba.position = 0;
var fr : FileReference = new FileReference();
// There's no need for me to put the rest so
...
fr.download(urlRequest, "workspace.ws");
}
public function onLoadButtonClick(event : MouseEvent) : void
{
veFileReference = new FileReference();
veFileReference.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, loadCompleteHandler);
// This part works as well so I'm skipping it.
}
public function loadCompleteHandler(event : DataEvent) : void
{
// Pretend I loaded "workspace.ws" by bouncing it off of my servlet byte for byte.
var ba : ByteArray = new ByteArray();
ba.writeObject(event.data);
ba.position = 0;
var obj : * = ba.readObject();
trace(obj is MyWorkspace); // Prints false
}
여기 내 문제는 작업 영역을 절약하지 않습니다. 그건 잘된거야. 내 문제는 작업 영역을로드하는 것입니다. 바이트 배열에 쓰는 event.data는 MyWorkspace 객체로 재구성되지 않지만 파일에 정확히 쓴 것입니다.
데이터에서 MyWorkspace 객체를 만드는 방법이 있어야하지만 알아낼 수는 없습니다. 아무도 이것을하기 전에 시도한 적이 있습니까?
감사합니다.
예. 캐스팅 예외가 발생합니다. – AdamR
정확한 오류 란 무엇인가요? – JeffryHouser
TypeError : 오류 # 1034 : 형식 강제 변환에 실패했습니다 : "전체 파일 내용을 여기"MyWorkspace로 변환 할 수 없습니다 – AdamR