将普通旧对象转换为值对象

时间:2013-04-08 04:57:13

标签: actionscript-3 flex

我认为我有一个真正的noob时刻,我从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 fake Ave”
工人城市“威尔顿”
workerCountry“Ameriland” workerEmail“Afake@me.com”
workerFName“Foo”
workerHhone“435234”
workerID 1
workerImage null
workerIsAdmin true
workerLName“Foo”
workerMPhone“827271903” workerPassword“密码”
workerPosition“Leader”
workerState“”
workerSuburb“Birkenhead”
workerWPhone null

我的班级看起来像这样:

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:类型强制失败:无法将Object @ 114eeb251转换为com.cavej03.sitesafe.vo.WorkerVO。

我完全错了。我只是想创建一个接受此对象的函数或构造函数,并将其字段映射到新的WorkerVO

2 个答案:

答案 0 :(得分:2)

您缺少RemoteClass元数据标记。此标记告诉您的应用程序将给定客户端VO映射到哪个服务器端VO。

像这样使用:

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

此外,根据您显示的内容,您的属性名称看起来不匹配:客户端名称前置下划线,而服务器端名称不下。 客户端VO和服务器端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。

答案 1 :(得分:0)

将返回的对象分配给WorkerVO中的属性,并为每个属性准备getter,如下所示:

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);
相关问题