首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

对一个 Remote Object 的懂得

2012-11-01 
对一个Remote Object的理解http://www.blogjava.net/19851985lili/articles/99128.html对于大型的应用程序

对一个 Remote Object 的理解

http://www.blogjava.net/19851985lili/articles/99128.html

对于大型的应用程序,MM及一些志同道合者,都认为和后台的数据交换应该采用RO的方式,因为这种方式更强大。

?

MM提供的实例程序中就有这样一个:文件的结构是这样的:

?

1.一个mxml文件:EDRemoteObject.mxml

它里面导入了两个as类,分别是EmployeeVO.as和PhoneNumberVO.as,这两个类存放在当前目录的samples\data子目录下,因此在mxml文件中要导入这两个类的包。因此在script中有代码:import samples.data.*;

声明RemoteObject,代码如下:

?

<mx:RemoteObject id="srv" source="samples.data.EmployeeService">

??? <mx:method name="addEmployee"/>

</mx:RemoteObject>

对代码的说明,source是指对应的在samples\WEB-INF\classes\samples\data下的java类(也就是EmployeeService.class文件)。

?

?

?

2.对EmployeeVO.as的理解:

?

在EmployeeVO.as中有这样一行代码:

?

static var registered=

Object.registerClass("samples.data.EmployeeVO", samples.data.EmployeeVO);

该行代码声明的是一个类的映射(class mapping),括号中前一部分是Java类,后一个部分是as类。

?

注意的是:java和as的类名必须严格一致;java和as类的数据类型必须严格一致;另外,包的名称不是必须一致,但是推荐包名也保持一致。

?

3.对java文件的理解:

?

Java文件和相对应的class文件存放的目录是samples\WEB-INF\classes\samples\data;分别是EmployeeService.java、EmployeeVO.java、PhoneNumberVO.java,以及相对应的class文件。

?

Java文件的理解不是很难,这里不再一一赘述了。但是值得注意的是,根据MM提供的源代码,程序的输出结果似乎是不可理解的,正要考虑是不是调用了别的什么函数。突然想到,可以反编译class得到java文件。于是反编译,果然,MM提供的源代码中有部分的删节。反编译的java文件放在了samples\WEB-INF\classes\samples\data\java bak下面,EmployeeService.java的代码里面还有一小部分尚未完全理解,有待进一步探讨。见另一篇文章:一个Remote Object的实例应用(从java到Flex)。

?

另外,本应用程序支持中文的输入,不需要作任何的改动。

?

以这个程序作为蓝本,对Flex和数据库的连接应该是很有帮助的。

?

一个Remote?Object的应用程序(从java到flex传送数据)对一个   Remote Object   的懂得对一个   Remote Object   的懂得

?

昨天对MM提供的源代码中的关于Remote Objecet的一个应用程序,做了深刻的分析。剩下了一个小问题就是,对samples\WEB-INF\classes\samples\data下的EmployeeService.java(由class反编译得到的)文件中的一个方法,不是很理解,代码如下:

?

public List getEmployeeList()

??? {

??????? DateFormat df = new SimpleDateFormat("mm/dd/yyyy");

??????? ArrayList list = new ArrayList();

??????? try

??????? {

??????????? list.add(new EmployeeVO("Walter", "Mellon", 46000, df.parse("1/20/2001")));

…………

?

??????? }

??????? catch(ParseException e)

??????? {

??????????? e.printStackTrace();

??????? }

??????? return list;

??? }

今天研究了一下,这个方法是向flex前台传送数据的,返回值的类型是list。

?

上网参照网友的例子,并参照EDRemoteObject.mxml,写了一个自己的应用程序。

?

程序源代码放在了\samples\My_Examples\complexdata文件夹下,文件名字EDRemoteObjectRec.mxml。

?

在这个应用程序中,定义了一个Remote Object,代码如下:

?

??? <mx:RemoteObject id="srv" source="samples.data.EmployeeService"

???????? ???????????????? result="datagrid.dataProvider=event.result"

???????? ???????????????? fault="alert(event.fault.faultstring, 'RemoteObject Error')">

??????? <mx:method name="getEmployeeList"/>

??? </mx:RemoteObject>

其他的部分不再赘述。需要注意的是result="datagrid.dataProvider=event.result",正是它定义了datagrid的dataProvider。

?

然后是一个显示结果的datagrid,不再赘述。

?

其实,这个应用很简单。


有很多朋友都问如何在flex中的2ge"窗体"(以下我也这么称呼)之间进行调用和传递参数
下面我就给大家讲解一下 对一个   Remote Object   的懂得
1. 调用窗体
A 窗体是一个applicaton窗体 B 窗体是自定义窗体(类似Dialog之类的窗体,本身并不能独立运行)
A 窗体 片断代码如下:
.............
.............
<mx:Script><![CDATA[

??import mx.containers.TitleWindow;
??import mx.managers.PopUpManager;
????
??function ShowDetailDialog(){
????var oInitObj:Object = new Object();
????oInitObj.title = "FX-Blog Details";
????oInitObj.width = 400;
????oInitObj.height = 480;
????oInitObj.x = 350;
????oInitObj.mainApp = this;
????oInitObj.strDetailTitle = "aaa";
????oInitObj.strDetailDetails = "bbb";
????var DetailsDialogInstance:Object =
????????TitleWindow(PopUpManager.createPopUp(_root, B, true, oInitObj, false))
??}
]]></mx:Script>
<mx:Button label="Click" click="ShowDetailDialog()" width="61"/>??
------------------
B 窗体 片断代码如下:
.............
.............
<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:mx="http://www.macromedia.com/2003/mxml"
????closeButton="true"
????click="this.deletePopUp();"
????alpha="50" initialize="initComponent()">
<mx:Script><![CDATA[
??public var mainApp:index = null;
??public var strDetailTitle:String;
??public var strDetailDetails:String;
??}
]]></mx:Script>
<mx:TextArea" text="{strDetailTitle}" editable="false" width="100%" alpha="0" height="240" vScrollPolicy="auto"/>
<mx:TextArea" text="{strDetailDetails}" editable="false" width="100%" alpha="0" height="240" vScrollPolicy="auto"/>
</mx:TitleWindow>
--------------
以上,当在A 窗体点击button的时候,触发Click event然后调用ShowDetailDialog这个function,在这个function中红色的字体是必须要注意的,其中strDetailTitle和strDetailDetails 这个2个变量就是要传递参数的变量和B 窗体中的strDetailTitle和strDetailDetails 必须一致,否则flex中不认哦,这样当点击button后,就会调用B 窗体并且把strDetailTitle 和strDetailDetails 传递到B 窗体的 textArea中了,其中varDetailsDialogInstance:Object =TitleWindow(PopUpManager.createPopUp(_root, B, true, oInitObj, false)这个代码中的B一定要和A在同一个文件夹中,并且名字和和B的外部名称一致,否则也会失败的!

热点排行