将普通的旧对象转换为值对象
我认为我有一个真正的小白时刻,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
返回的对象赋值给一个属性中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);
你缺少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。
RIA明星,感谢您所付出的所有努力,这是我第一次使用flex,冷聚变和动作脚本3,并且我在到处看到你的名字时im研究事情是如何工作的。你的时间,评论和帮助真的很感激。我正在考虑在ColdFusion中正确构建我的服务器端代码,即值对象cfcs我只需将数据库查询插入cfset(非常小心)= D可能有另外一个或两个问题,但先生自己先给我发一个问题。 – Jaybeecave 2013-04-09 12:29:34
@ Cavej03只要注意到我忘记了我的示例的RemoteClass元数据标签中的'alias ='部分。刚编辑我的答案来解决这个问题。 – RIAstar 2013-04-09 13:47:45
是的你的最后一点。 – Marty 2013-04-08 05:04:14
我认为更好的方法是将结果映射到值对象,当它们通过coldfusion返回时,但我也不知道如何做到这一点。 – Jaybeecave 2013-04-08 05:05:59
@Marty有更好的方法吗?我可以让Coldfusion自动返回这些对象作为值对象 – Jaybeecave 2013-04-08 05:07:56