<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    【永恒的瞬間】
    ?Give me hapy ?

    對一個 Remote Object 的理解

    對于大型的應(yīng)用程序, MM 及一些志同道合者,都認為和后臺的數(shù)據(jù)交換應(yīng)該采用 RO 的方式,因為這種方式更強大。

    MM 提供的實例程序中就有這樣一個:文件的結(jié)構(gòu)是這樣的:

    1. 一個 mxml 文件: EDRemoteObject.mxml

    它里面導(dǎo)入了兩個 as 類,分別是 EmployeeVO.as PhoneNumberVO.as ,這兩個類存放在當前目錄的 samples\data 子目錄下,因此在 mxml 文件中要導(dǎo)入這兩個類的包。因此在 script 中有代碼: import samples.data.*;

    聲明 RemoteObject ,代碼如下:

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

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

    </mx:RemoteObject>

    對代碼的說明, source 是指對應(yīng)的在 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 類的數(shù)據(jù)類型必須嚴格一致;另外,包的名稱不是必須一致,但是推薦包名也保持一致。

    3. java 文件的理解:

    Java 文件和相對應(yīng)的 class 文件存放的目錄是 samples\WEB-INF\classes\samples\data ;分別是 EmployeeService.java EmployeeVO.java PhoneNumberVO.java ,以及相對應(yīng)的 class 文件。

    Java 文件的理解不是很難,這里不再一一贅述了。但是值得注意的是,根據(jù) MM 提供的源代碼,程序的輸出結(jié)果似乎是不可理解的,正要考慮是不是調(diào)用了別的什么函數(shù)。突然想到,可以反編譯 class 得到 java 文件。于是反編譯,果然, MM 提供的源代碼中有部分的刪節(jié)。反編譯的 java 文件放在了 samples\WEB-INF\classes\samples\data\java bak 下面, EmployeeService.java 的代碼里面還有一小部分尚未完全理解,有待進一步探討。見另一篇文章:一個Remote Object的實例應(yīng)用(從java到Flex)。

    另外,本應(yīng)用程序支持中文的輸入,不需要作任何的改動。

    以這個程序作為藍本,對 Flex 和數(shù)據(jù)庫的連接應(yīng)該是很有幫助的。


    一個Remote?Object的應(yīng)用程序(從java到flex傳送數(shù)據(jù))

    昨天對 MM 提供的源代碼中的關(guān)于 Remote Objecet 的一個應(yīng)用程序,做了深刻的分析。剩下了一個小問題就是,對 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 前臺傳送數(shù)據(jù)的,返回值的類型是 list 。

    上網(wǎng)參照網(wǎng)友的例子,并參照 EDRemoteObject.mxml ,寫了一個自己的應(yīng)用程序。

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

    在這個應(yīng)用程序中,定義了一個 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

    然后是一個顯示結(jié)果的 datagrid ,不再贅述。

    其實,這個應(yīng)用很簡單。


    有很多朋友都問如何在flex中的2ge"窗體"(以下我也這么稱呼)之間進行調(diào)用和傳遞參數(shù)
    下面我就給大家講解一下
    1. 調(diào)用窗體
    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的時候,觸發(fā)Click event 然后調(diào)用ShowDetailDialog這個function,在這個function中紅色的字體是必須要注意的,其中strDetailTitle 和strDetailDetails 這個2個變量就是要傳遞參數(shù)的變量和B 窗體中的strDetailTitle 和strDetailDetails 必須一致,否則flex中不認哦,這樣當點擊button后,就會調(diào)用B 窗體 并且把strDetailTitle 和strDetailDetails 傳遞到B 窗體的 textArea中了,其中var DetailsDialogInstance:Object = TitleWindow(PopUpManager.createPopUp(_root, B, true, oInitObj, false)這個代碼中的B一定要和A在同一個文件夾中,并且名字和和B的外部名稱一致,否則也會失敗的!

    posted on 2007-02-10 13:42 ???MengChuChen 閱讀(2483) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 一级做受视频免费是看美女| 亚洲国产成人AV网站| 亚洲熟女综合一区二区三区| 日日狠狠久久偷偷色综合免费| 免费视频成人手机在线观看网址| 欧洲精品成人免费视频在线观看| 亚洲VA综合VA国产产VA中| 97亚洲熟妇自偷自拍另类图片| 久久亚洲AV成人无码国产电影| 久艹视频在线免费观看| 国产成人免费全部网站| 亚洲国产一区二区三区青草影视| 噜噜综合亚洲AV中文无码| 91成人在线免费观看| jlzzjlzz亚洲乱熟在线播放| 亚洲人成在久久综合网站| 国产福利免费视频| 最近中文字幕免费mv视频8| 亚洲高清专区日韩精品| 亚洲国产精品无码中文lv| 99久久久国产精品免费牛牛四川| 免费人成在线观看网站视频| 亚洲福利电影在线观看| 国产精品美女免费视频观看| 好爽又高潮了毛片免费下载| 亚洲av日韩av高潮潮喷无码 | 亚洲美国产亚洲AV| 亚洲精品免费视频| 两性色午夜视频免费播放| aaa毛片视频免费观看| 国产伦精品一区二区免费| 亚洲?v女人的天堂在线观看| 久久精品国产亚洲av麻豆色欲| 亚洲av最新在线网址| 内射少妇36P亚洲区| 亚洲中文无码永久免| 黄色大片免费网站| 国产97视频人人做人人爱免费| 国内精品99亚洲免费高清| 久久青草91免费观看| 最近最好的中文字幕2019免费 |