2013-04-08 209 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