我认为我有一个真正的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
答案 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);