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

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

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

    小菜毛毛技術分享

    與大家共同成長

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      164 Posts :: 141 Stories :: 94 Comments :: 0 Trackbacks
    最近學習flex,參考了不少網上的資料,特別是 中國flex開發者(http://www.flexer.cn/)。flex數據交互是一個關鍵,做個學習總結,請flex老鳥指正!

    flex和后端的數據交互有很多方式,flex可以使用ActionScript讀寫文件(xml、txt)的形式存儲顯示數據,
    Flex 3.0中新增了對本地數據庫(.db格式)操作的類,可用于讀取本地的數據庫數據。新增了對PDF數據
    操作的類,可用于讀取PDF數據。

    xml文件方式

    XML優點是簡單小巧、存儲方便、檢索快速。所以,XML常用于數據存儲和數據交換。Flex 3.使用URLLoader類可方便地傳輸XML數據。
    使用XML方式傳輸數據的步驟如下所示。
    新建名為"tree.xml"文件,用以存儲XML數據:
    Xml代碼 復制代碼
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <menus>  
    3.     <node label="Mail">  
    4.         <node label="Inbox"/>  
    5.         <node label="Personal Folder">  
    6.             <node label="Demo"/>  
    7.             <node label="Personal"/>  
    8.             <node label="Saved Mail"/>  
    9.             <node label="bar"/>  
    10.         </node>  
    11.         <node label="Calendar"/>  
    12.         <node label="Sent"/>  
    13.         <node label="Trash"/>  
    14.     </node>  
    15. </menus>  

    xml文件的讀寫我們可以用FileStream類來實現:
    讀取xml文件:
    Javascript代碼 復制代碼
    1. var testXML:XML;   
    2. var file:File = File.documentsDirectory.resolvePath("tree.xml");   
    3. var fileStream:FileStream = new FileStream();   
    4. fileStream.open(file, FileMode.READ);   
    5. testXML = XML(fileStream.readUTFBytes(fileStream.bytesAvailable));   
    6. fileStream.close();  

    寫回xml文件
    Javascript代碼 復制代碼
    1. var testXML:XML=<content>content</content>......;   
    2. var file:File = File.documentsDirectory.resolvePath("tree.xml");   
    3. var fileStream:FileStream = new FileStream();   
    4. fileStream.open(file, FileMode.WRITE);   
    5. var outputString:String = '<?xml version="1.0" encoding="utf-8"?>\n';   
    6. outputString += testXML.toXMLString();   
    7. fileStream.writeUTFBytes(outputString);   
    8. fileStream.close();  

    需要說明一下的是文件打開方式:FileMode
    READ --設置文件打開方式為只讀
    WRITE--設置文件打開方式為寫數據。文件不存在,則創建;文件存在,則覆蓋原有數據。
    APPEND--設置文件打開方式為追加。文件不存在,則創建;文件存在,則新數據從文件末尾開始增加。
    UPDATE--設置文件打開方式為讀寫。文件不存在,則創建。設置該模式通常用于隨機讀寫訪問文件。可以從文件的任意位置讀取,寫入數據時,只有寫入位置的存在字節被覆蓋,其他所有字節不受影響。

    這里我們使用URLRequest類來加載xml數據,編寫應用程序初始化處理函數loadXML。
    變量,用以指明XML文件路徑。
    public function loadXML():void//應用程序初始化處理函數
    {
        //定義URLRequest實例,指定文件地址。
        var request:URLRequest=new URLRequest("tree.xml");
        loader.load(request);//加載XML文件
        loader.addEventListener(Event.COMPLETE,completeHandle);     //添加加載完成時的監聽
    }

    loader.addEventListener(Event.COMPLETE,completeHandle)語句表示添加對XML加載完成事件的監聽。一旦加載完成執行
    completeHandle函數。完成剩余MXML代碼。剩余代碼包括completeHandle函數,<mx:Tree>組件設計等。
    以下代碼是完整的MXML代碼。
    Java代碼 復制代碼
    1. <?xml version="1.0" encoding="utf-8"?>   
    2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" fontFamily="simsun"    
    3.     fontSize="12" layout="absolute" width="242" height="442" creationComplete="loadXML()">   
    4.     <mx:Script>   
    5.           <![CDATA[   
    6.             import mx.collections.ArrayCollection;    
    7.             import mx.rpc.events.ResultEvent;          
    8.             public var loader:URLLoader=new URLLoader();   
    9.             public var menus:XML=new XML();            
    10.             public function loadXML():void             
    11.             {   
    12.                 var request:URLRequest=new URLRequest("tree.xml");   
    13.                 loader.load(request);    
    14.                 loader.addEventListener(Event.COMPLETE,completeHandle);   
    15.             }   
    16.             public function completeHandle(e:Event):void  
    17.             {   
    18.                 menus=XML(loader.data);               
    19.                 var results:XMLList=menus.node;       
    20.                 tree.dataProvider=results;    
    21.             }   
    22.           ]]>   
    23.     </mx:Script>   
    24.   
    25.     <mx:Tree id="tree" x="10" y="35" width="218" height="397" labelField="@label" />   
    26.     <mx:Label x="10" y="10" text="Tree Nodes From XML File"/>   
    27.  </mx:Application>  

    這是運行結果截圖:



    <mx:HTTPService>組件方式


    <mx:HTTPService>組件可與所有的后端程序交互。例如,ASP、ASP.Net、JSP、PHP等。
    以下是一個<mx:HTTPService>組件語法示例:
    <mx:HTTPService id="feedRequest" url="http://localhost:8080/myflex/helloworld?para_1=para_1&para_2=para_2" result="showResult(event)" />
    id唯一標識該組件,url是數據提交的地址,可以在地址后面添加參數,提交到后端進行處理,處理后
    再返回Flex可識別的數據類型,如數組型、XML型、Object型等。

    <mx:HTTPService>組件返回的數據存儲于ResultEvent類中。使用<mx:HTTPService>組件的result事件可處理HTTP程序返回的數據。
    eg. <mx:HTTPService result="處理函數名">

    返回的數據存儲于ResultEvent類的result屬性下。各種數據的具體位置與HTTP程序的處理結果有關。
    數據返回后的處理方法示例:
    Java代碼 復制代碼
    1. import mx.rpc.events.ResultEvent;                          
    2. import mx.controls.Alert;                                 
    3.   
    4. private function showResult(e:ResultEvent):void  
    5. {   
    6.     Alert.show(e.result as String);                       
    7. }  


    來一個簡單的例子會讓你更加明白的!

    這是客戶端mxml的源代碼:
    Xml代碼 復制代碼
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" >  
    3.     <mx:Script>     
    4.       <![CDATA[    
    5.         import mx.rpc.events.ResultEvent;                
    6.         import mx.controls.Alert;                     
    7.           
    8.         private var arr:Array=new Array();               
    9.         private function addHandle():void             
    10.         {  
    11.             myHttp.url="http://localhost:8080/myflex/sum";                                                       
    12.             if(arr.length>0)                             
    13.                 myHttp.url+="?";  
    14.             for(var i:int=0;i<arr.length;i++)             
    15.             {  
    16.                 if(i!=arr.length-1)  
    17.                     myHttp.url+="num="+arr[i].para.toString()+"&";  
    18.                 else  
    19.                     myHttp.url+="num="+arr[i].para.toString();  
    20.             }  
    21.             Alert.show(myHttp.url);  
    22.             myHttp.send();                         
    23.         }  
    24.           
    25.         private function addData():void           
    26.         {  
    27.             var obj:Object=new Object();             
    28.             obj.para=txtPara.text;                  
    29.             arr.push(obj);                          
    30.             dg.dataProvider=arr;                     
    31.             txtPara.text="";                       
    32.             dg.validateNow();                        
    33.         }  
    34.           
    35.         private function delData():void           
    36.         {  
    37.             arr=new Array();                               
    38.             dg.dataProvider=arr;                   
    39.             dg.validateNow();                        
    40.         }  
    41.           
    42.         private function httpHandle(e:ResultEvent):void  
    43.         {  
    44.             lblResult.text=e.result.sumTag;  
    45.         }  
    46.         ]]>     
    47.     </mx:Script>     
    48.     <mx:HTTPService id="myHttp" showBusyCursor="true" result="httpHandle(event);" useProxy="false"/>  
    49.     <mx:Panel title="測試HTTPService" width="368" height="334" x="78" y="30" layout="absolute">  
    50.         <mx:Label text="疊加參數:" x="110" y="26"/>  
    51.         <mx:TextInput id="txtPara" x="161" y="24" width="95"/>    
    52.         <mx:DataGrid id="dg" x="76" y="64" height="166" width="179">  
    53.             <mx:columns>  
    54.                 <mx:DataGridColumn dataField="para" headerText="參數列表"/>  
    55.             </mx:columns>  
    56.         </mx:DataGrid>  
    57.         <mx:Button label="添加" click="addData();" x="277" y="26"/>     
    58.         <mx:Button label="刪除" click="delData();" x="277" y="64"/>     
    59.         <mx:Label text="疊加結果是:" x="58" y="253"/>  
    60.         <mx:Label x="126" y="253" id="lblResult"/>     
    61.         <mx:Button label="計算" click="addHandle();" x="277" y="249"/>      
    62.     </mx:Panel>  
    63. </mx:Application>  

    "http://localhost:8080/myflex/sum"是一個servlet的映射地址,actionscript方法addHandle將每一個數字參數添加到url映射地
    址后面并且向服務器發送請求,addData方法把輸入的數字顯示到下方列表,delData方法刪除整個列表,httpHandle方法處理服務器
    的返回值。其中e.result.sumTag表示取得xml返回數據中sumTag標簽中的內容。
    以下是servlet中對接收參數的處理:
    Java代碼 復制代碼
    1. public void doPost(HttpServletRequest request, HttpServletResponse response)   
    2.             throws ServletException, IOException   
    3.     {   
    4.         String[] para = request.getParameterValues("num");   
    5.         int sum = 0;   
    6.         if (para != null)   
    7.         {   
    8.             for (int i = 0; i < para.length; i++)   
    9.             {   
    10.                 if (para[i] != null && !"".equals(para[i]))   
    11.                 {   
    12.                     sum = sum + Integer.parseInt(para[i]);   
    13.                 }   
    14.             }   
    15.         }   
    16.         response.getWriter().print(   
    17.                 "<?xml version=\"1.0\" encoding=\"utf-8\"?><sumTag>" + sum   
    18.                         + "</sumTag>");   
    19.     }  


    下面是例子運行的截圖:


    下一次學習總結一下<mx:WebService>組件和RemoteObject及其他的交互方式!
    posted on 2009-07-28 13:53 小菜毛毛 閱讀(1570) 評論(0)  編輯  收藏 所屬分類: FLEX
    主站蜘蛛池模板: 韩国免费A级毛片久久| 亚洲国产福利精品一区二区| 国产偷国产偷亚洲高清在线 | 亚洲一区二区三区免费| 免费永久看黄在线观看app| 18禁亚洲深夜福利人口| 国产免费人成在线视频| 视频一区二区三区免费观看| 免费在线观看污网站| 人妻仑乱A级毛片免费看| 国产AⅤ无码专区亚洲AV| 久99久无码精品视频免费播放| 国产成人99久久亚洲综合精品| www一区二区www免费| 国产av无码专区亚洲av桃花庵| 久久国产精品免费网站| 亚洲日本香蕉视频| 日韩一区二区a片免费观看| 国产精品无码亚洲精品2021 | 久久受www免费人成_看片中文| 亚洲一级免费毛片| 国产视频精品免费| igao激情在线视频免费| 亚洲三级电影网址| 中文字幕影片免费在线观看| 亚洲风情亚Aⅴ在线发布| 亚洲午夜国产精品无码| 亚洲啪啪免费视频| 亚洲AV网一区二区三区| 国产v亚洲v天堂无码网站| 1区2区3区产品乱码免费| 青青青亚洲精品国产| 亚洲人成无码网站| 日本在线高清免费爱做网站| 色婷婷精品免费视频| 亚洲国产综合专区在线电影| 色播在线永久免费视频| 久久99免费视频| 亚洲精品乱码久久久久蜜桃| 亚洲国产精品VA在线看黑人| 午夜免费福利在线观看|