我正試圖使用本地柔性序列化/反序列化過程來保存/加載工作區在flex中的狀態。爲了保存或加載文件,我必須使用我的servlet,它只是將輸入流中的字節反彈回輸出流。下面是我的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 2010-07-15 15:44:35
確切的錯誤是什麼? – JeffryHouser 2010-07-15 16:25:03
TypeError:錯誤#1034:類型強制失敗:無法將「整個文件內容」轉換爲MyWorkspace – AdamR 2010-07-15 16:35:17