2013-04-08 255 views
0

我認爲我有一個真正的小白時刻,Im從Coldfusion返回一個遠程對象,我想指定對象類型。即我正在從coldfusion獲得一名工作人員,而且我有一名Value object Worker。將普通的舊對象轉換爲值對象

繼承人什麼,我一直在努力

public function ResultHandler_GetWorker(event:ResultEvent):void 
{ 
    var result:ArrayCollection = ArrayCollection(event.result); 
    var worker:WorkerVO = WorkerVO(result[0]); 
    model.worker = worker; 
} 

Result[0]是僱員對象。它的調試結構看起來像這樣。

workerAddress 「24B假大道」
workerCity 「韋爾頓」
workerCountry 「Ameriland」 workerEmail 「[email protected]
workerFName 「富」
workerHPhone 「435234」
workerID 1
workerImage null
workerIsAdmin true
workerLName「Foo」
workerMPhone「827271903」 workerPassword「password」
workerPosition 「領頭羊」
workerState 「」
workerSuburb 「伯肯黑德」
workerWPhone空

我的課是這樣的:

public class WorkerVO 
{  
    public var _workerAddress:String 
    public var _workerCity:String 
    public var _workerCountry:String  
    public var _workerEmail:String 
    public var _workerFName:String 
    public var _workerHPhone:String 
    public var _workerID:uint; 
    public var _workerImage:String 
    public var _workerIsAdmin:Number; 
    public var _workerLName:String 
    public var _workerMPhone:String; 
    public var _workerPassword:String; 
    public var _workerPosition:String; 
    public var _workerState:String; 
    public var _workerSuburb:String; 
    public var _workerWPhone:String; 


    public function WorkerVO() 
    { 
    } 

    //Getters & Setters 
} 

錯誤#1034:類型強制失敗:無法轉換對象@ 114eeb251到com.cavej03.sitesafe.vo.WorkerVO。

我是否完全錯誤。難道我只是意味着使接受這個對象及其字段映射到一個新的WorkerVO

+0

是的你的最後一點。 – Marty 2013-04-08 05:04:14

+0

我認爲更好的方法是將結果映射到值對象,當它們通過coldfusion返回時,但我也不知道如何做到這一點。 – Jaybeecave 2013-04-08 05:05:59

+0

@Marty有更好的方法嗎?我可以讓Coldfusion自動返回這些對象作爲值對象 – Jaybeecave 2013-04-08 05:07:56

回答

0

返回的對象賦值給一個屬性中WorkerVO,並準備干將爲他們每個人,像這樣的函數或構造函數:

public class WorkerVO 
{ 

    private var _base:Object; 


    public function WorkerVO(base:Object) 
    { 
     _base = base; 
    } 


    public function get address():String{ return _base.workerAddress; } 
    public function get city():String{ return _base.workerCity; } 
    // Etc. 

} 

與勞動者的定義,只是需要new關鍵字添加:

var worker:WorkerVO = new WorkerVO(result[0]); 
trace(worker.address); 
2

你缺少RemoteClass元數據標籤。這個標籤告訴你的應用程序哪個服務器端的VO給定的客戶端VO映射到。

使用方法如下:

[RemoteClass(alias="path.to.WorkerVO")] //this is the servers-side path 
public class WorkerVO { 
    ... 
} 

而且從你正在展示它看起來像你的屬性的名稱不匹配:客戶端一個在前面加上下劃線,而服務器端的一個沒有。
客戶端VO和服務器端的名稱應該完全相同。例如:

/* Java VO */ 
public class WorkerVO { 

    private String workerAddress; 
    public String getWorkerAddress() { 
     return workerAddress; 
    } 
    public void setWorkerAddress(String workerAddress) { 
     this.workerAddress = workerAddress; 
    } 

} 

/* ActionScript VO */ 
[RemoteClass(alias="path.to.WorkerVO")] 
public class WorkerVO { 

    public var workerAddress:String; 

} 

這是一個Java VO的例子,但同樣適用於ColdFusion。

+0

RIA明星,感謝您所付出的所有努力,這是我第一次使用flex,冷聚變和動作腳本3,並且我在到處看到你的名字時im研究事情是如何工作的。你的時間,評論和幫助真的很感激。我正在考慮在ColdFusion中正確構建我的服務器端代碼,即值對象cfcs我只需將數據庫查詢插入cfset(非常小心)= D可能有另外一個或兩個問題,但先生自己先給我發一個問題。 – Jaybeecave 2013-04-09 12:29:34

+0

@ Cavej03只要注意到我忘記了我的示例的RemoteClass元數據標籤中的'alias ='部分。剛編輯我的答案來解決這個問題。 – RIAstar 2013-04-09 13:47:45

相關問題