小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

從服務(wù)器端獲得數(shù)據(jù)并用Flex展示

 真愛圖書 2014-04-11

如何從服務(wù)器端獲得數(shù)據(jù)并通過Flex以圖表形式展現(xiàn)出來,主要思路是:用戶通過瀏覽器調(diào)用嵌入Flex應(yīng)用的html頁面->Flex應(yīng)用發(fā)送請求到服務(wù)端請求數(shù)據(jù)->服務(wù)端將數(shù)據(jù)返回給Flex應(yīng)用->Flex向用戶展示數(shù)據(jù)。 下面分別從服務(wù)端和Flex進行說明:

1.編寫服務(wù)端

       服務(wù)端用來向Flex應(yīng)用返回請求的數(shù)據(jù)。這里的數(shù)據(jù)格式設(shè)置為XML數(shù)據(jù)。對于XML數(shù)據(jù),可以直接返回一個XML文件或者通過編碼返回XML格式的數(shù)據(jù)。這里我們采用后者,這里的服務(wù)端還接收一個參數(shù):type,根據(jù)type不同返回不同的XML數(shù)據(jù)。

  1. package service;  
  2.   
  3. import java.io.*;  
  4.   
  5. import javax.servlet.*;  
  6. import javax.servlet.http.*;  
  7.   
  8. /** 
  9.  * 返回<STRONG style="BACKGROUND-COLOR: #ffff66; COLOR: black">Flex</STRONG>請求的XML數(shù)據(jù) 
  10.  * @author tangs 
  11.  */  
  12. public class DataServiceServlet extends HttpServlet {  
  13.      
  14.     /**  
  15.     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods. 
  16.     * @param request servlet request 
  17.     * @param response servlet response 
  18.     */  
  19.     protected void processRequest(HttpServletRequest request, HttpServletResponse response)  
  20.     throws ServletException, IOException {  
  21.         response.setContentType("text/xml;charset=UTF-8");  
  22.         PrintWriter out = response.getWriter();  
  23.         try {  
  24.             //根據(jù)type不同,返回不同的XML數(shù)據(jù)   
  25.             String type = request.getParameter("type");  
  26.               
  27.             StringBuilder xml = new StringBuilder();  
  28.             xml.append("<?xml version='1.0' encoding='UTF-8'?>");  
  29.             if ("1".equals(type)) {  
  30.                 xml.append("<root>");  
  31.                 xml.append("<Expense name='Taxses' value='3000'/>");  
  32.             xml.append("<Expense name='Rent' value='1520'/>");  
  33.                 xml.append("<Expense name='Bills' value='500'/>");          
  34.                 xml.append("</root>");  
  35.             } else if ("2".equals(type)) {  
  36.                 xml.append("<root>");  
  37.                 xml.append("<Expense name='Taxses' value='5000'/>");  
  38.             xml.append("<Expense name='Rent' value='1020'/>");  
  39.                 xml.append("<Expense name='Bills' value='210'/>");          
  40.                 xml.append("</root>");  
  41.             }  
  42.             out.println(xml.toString());  
  43.         } finally {   
  44.             out.close();  
  45.         }  
  46.     }   
  47.   
  48.     // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">   
  49.     /**  
  50.     * Handles the HTTP <code>GET</code> method. 
  51.     * @param request servlet request 
  52.     * @param response servlet response 
  53.     */  
  54.     protected void doGet(HttpServletRequest request, HttpServletResponse response)  
  55.     throws ServletException, IOException {  
  56.         processRequest(request, response);  
  57.     }   
  58.   
  59.     /**  
  60.     * Handles the HTTP <code>POST</code> method. 
  61.     * @param request servlet request 
  62.     * @param response servlet response 
  63.     */  
  64.     protected void doPost(HttpServletRequest request, HttpServletResponse response)  
  65.     throws ServletException, IOException {  
  66.         processRequest(request, response);  
  67.     }  
  68.   
  69.     /**  
  70.     * Returns a short description of the servlet. 
  71.     */  
  72.     public String getServletInfo() {  
  73.         return "Short description";  
  74.     }  
  75.     // </editor-fold>   
  76. }  

 服務(wù)端很簡單,就是返回請求數(shù)據(jù)。

2.編寫Flex應(yīng)用

       這個例子總Flex需要向服務(wù)端發(fā)送請求的同時,傳遞一個參數(shù)。用Flex發(fā)送帶參數(shù)請求很簡單,但是如何向Flex應(yīng)用傳遞參數(shù),卻有些繁瑣。下面先來看Flex應(yīng)用如何獲得外部傳來的參數(shù):

  1. <?xml version="1.0"?>  
  2. <!-- charts/BasicPie.mxml -->  
  3. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"   
  4.     initialize="getParams();">    //<STRONG style="BACKGROUND-COLOR: #ffff66; COLOR: black">Flex</STRONG>應(yīng)用初始化時,向服務(wù)端獲取數(shù)據(jù)  
  5.   <mx:Script><![CDATA[ 
  6.      import mx.collections.ArrayCollection; 
  7.      import mx.rpc.http.HTTPService; 
  8.      import mx.controls.Alert; 
  9.       
  10.      [Bindable] 
  11.      private var service:HTTPService ; 
  12.          
  13.      private function get_Label(item:Object, field:String, index:Number, percentValue:Number):String 
  14.      { 
  15.          return item["name"].toString()+":"+item[field].toString(); 
  16.      } 
  17.          
  18.      //獲得參數(shù) 
  19.      private function getParams():void { 
  20.          //獲得參數(shù) 
  21.          var params:Object = this.parameters; 
  22.          if (params != null) { 
  23.                 //向服務(wù)端請求數(shù)據(jù) 
  24.                 service = DataLoader.getData(params["type"].toString()); 
  25.          } else { 
  26.                 Alert.show("No params"); 
  27.          } 
  28.              
  29.      } 
  30.          
  31.          
  32.   ]]></mx:Script>  
  33.   
  34.   <mx:Panel title="Pie Chart" backgroundColor="#FFFFFF">  
  35.     //展示餅狀圖  
  36.      <mx:PieChart id="myChart"   
  37.         dataProvider="{service.lastResult.root.Expense}"    //獲得服務(wù)端返回的數(shù)據(jù)  
  38.         showDataTips="true"  
  39.      >  
  40.         <mx:series>  
  41.            <mx:PieSeries   
  42.                 field="value"   
  43.                 nameField="name"   
  44.                 labelPosition="callout"  
  45.                 labelFunction="get_Label"  
  46.            />  
  47.         </mx:series>  
  48.      </mx:PieChart>  
  49.      <mx:Legend dataProvider="{myChart}"/>  
  50.   </mx:Panel>  
  51. </mx:Application>  

 從上面的代碼可以看出,Flex獲得參數(shù)的方法:

  1.      private function getParams():void {  
  2.          //獲得參數(shù)   
  3.          <SPAN style="COLOR: #ff0000">var params:Object = this.parameters;</SPAN>  
  4.   
  5.   
  6.          if (params != null) {  
  7.                 //向服務(wù)端請求數(shù)據(jù)   
  8.                 service = DataLoader.getData(<SPAN style="COLOR: #ff0000">params["type"].toString()</SPAN>  
  9.   
  10. );  
  11.          } else {  
  12.                 Alert.show("No params");  
  13.          }  
  14.               
  15.      }  

 在應(yīng)用加載的時候,通過調(diào)用getParams()方法,獲得傳入的參數(shù),并向服務(wù)端請求數(shù)據(jù)。

 Flex向服務(wù)端請求數(shù)據(jù)有3種方式:REST-sytle service,web service,Remote object service。這里使用的是第一種方式。REST-style service實際上就是采用HTTP協(xié)議通信的方式。Flex提供了HTTPService component,使用起來很方便。這里用的是ActionScript:

  DataLoader.as

  1. package  
  2. {  
  3.     import mx.controls.Alert;  
  4.     import mx.rpc.events.FaultEvent;  
  5.     import mx.rpc.events.ResultEvent;  
  6.     import mx.rpc.http.HTTPService;  
  7.   
  8.     public class DataLoader  
  9.     {  
  10.           
  11.         public function DataLoader()  
  12.         {  
  13.         }  
  14.         public static function getData(type:Object):HTTPService {  
  15.                 var service:HTTPService;  
  16.                 service = new HTTPService();  
  17.                 service.url = "http://localhost:7001/DataService/getData?type="+type;  
  18.                 service.method = "POST";  
  19.                 service.addEventListener("result", httpResult);  
  20.                 service.addEventListener("fault", httpFault);  
  21.                 service.send();  
  22.                   
  23.                 return service;  
  24.         }  
  25.   
  26.         public static function httpResult(event:ResultEvent):void {  
  27.                 var result:Object = event.result;  
  28.         }  
  29.   
  30.         public static function httpFault(event:FaultEvent):void {  
  31.                 var faultstring:String = event.fault.faultString;  
  32.                 Alert.show("Fault: " + faultstring);  
  33.         }  
  34. }  

 

 下面的代碼得到服務(wù)端返回的數(shù)據(jù):

  1. <mx:PieChart id="myChart"   
  2.         dataProvider="<SPAN style="COLOR: #ff0000">{service.lastResult.root.Expense}</SPAN>  
  3.   
  4. "    //獲得服務(wù)端返回的數(shù)據(jù)  
  5.         showDataTips="true"  
  6.      >  
  7.   。。。  
  8. </mx:PieChart>  

之后,Flex就可以根據(jù)獲得的數(shù)據(jù)將圖展現(xiàn)出來了。

上面說了Flex如何獲得參數(shù)并向服務(wù)端發(fā)送請求,那么參數(shù)是如何傳遞給Flex應(yīng)用的呢?這里就有點復(fù)雜了。需要寫一段JS腳本進行參數(shù)的傳遞。

    chartType.js

  1. var requiredMajorVersion = 9;  
  2. var requiredMinorVersion = 0;  
  3. var requiredRevision = 0;  
  4.   
  5. <!-- 動態(tài)創(chuàng)建Flash -->  
  6. <!-- id:應(yīng)用編號 -->  
  7. <!-- url:嵌入網(wǎng)頁的SWF文件名稱 -->  
  8. <!-- width:應(yīng)用在網(wǎng)頁中的寬度 -->  
  9. <!-- high:應(yīng)用在網(wǎng)頁中的高度 -->  
  10. <!-- type:服務(wù)端需要的參數(shù) -->  
  11.   
  12. function sendParameters(id, url, width, high, type)  
  13. {  
  14.     var hasProductInstall = DetectFlashVer(6, 0, 65);  
  15.     var hasRequestedVersion = DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision);  
  16.   
  17.     if(hasProductInstall && !hasRequestedVersion)  
  18.     {  
  19.         var MMPlayerType = (isIE == true) ? "ActiveX" : "PlugIn";  
  20.         var MMredirectURL = window.location;  
  21.         document.title = document.title.slice(0, 47) + " - Flash Player Installation";  
  22.         var MMdoctitle = document.title;  
  23.   
  24.         <SPAN style="COLOR: #ff0000">AC_FL_RunContent</SPAN>  
  25.   
  26. (  
  27.             "id", id,  
  28.             "src""playerProductInstall",  
  29.             "name", url,  
  30.             "width", width,  
  31.             "height", high,  
  32.             "menu"false,  
  33.             "wmode""opaque",  
  34.             "align""middle",  
  35.             "quality""high",  
  36.             "bgcolor""#808080",  
  37.             "allowScriptAccess","always",  
  38.             "FlashVars""MMredirectURL="+MMredirectURL+'&MMplayerType='+MMPlayerType+'&MMdoctitle='+MMdoctitle+"",  
  39.             "type""application/x-shockwave-flash",  
  40.             "pluginspage""http://www.adobe.com/go/getflashplayer");  
  41.     }  
  42.     else if(hasRequestedVersion)  
  43.     {  
  44.         var flashvars = "type=" + type;  
  45.           
  46.         <SPAN style="COLOR: #ff0000">AC_FL_RunContent</SPAN>  
  47.   
  48. (  
  49.             "id", id,  
  50.             "src", url,  
  51.             "name", url,  
  52.             "flashvars", flashvars,  
  53.             "menu"false,  
  54.             "width", width,  
  55.             "height", high,  
  56.             "wmode""opaque",  
  57.             "align""middle",  
  58.             "quality""high",  
  59.             "bgcolor""#808080",  
  60.             "allowScriptAccess","always",  
  61.             "type""application/x-shockwave-flash",  
  62.             "pluginspage""http://www.adobe.com/go/getflashplayer");  
  63.     }  
  64.     else  
  65.     {  
  66.         var alternateContent = 'Alternate HTML content should be placed here. '  
  67.             + 'This content requires the Adobe Flash Player. '  
  68.             + '<a href=http://www.adobe.com/go/getflash/>Get Flash</a>';  
  69.         document.write(alternateContent);  // insert non-flash content   
  70.     }  
  71. }  
  72.   
  73. function getInfoForFlash(type)  
  74. {      
  75.     if(type.toLowerCase().indexOf("f_code") != -1)  
  76.     {  
  77.         var target = document.getElementById("f_code");  
  78.         if(target != null)  
  79.             return target.value;  
  80.         else  
  81.             return "g01";  
  82.     }  
  83.     else if(type.toLowerCase().indexOf("f_title") != -1)  
  84.     {  
  85.         var target = document.getElementById("f_title");  
  86.         if(target != null)  
  87.             return target.value;  
  88.         else  
  89.             return "unkown";  
  90.     }  
  91.     else  
  92.         return "unkown";  
  93. }  

 上面的腳本中,調(diào)用了AC_FL_RunContent方法,這個方法是Flex提供給我們的一個方法,用FlexBuilder創(chuàng)建一個Flex Project后,就可以在html-template這個文件夾中看到一個叫AC_OETags.js的文件。這個方法就在這個文件中。下面是調(diào)用Flex應(yīng)用的html頁面:

   chart.html

  1. <html lang="en">  
  2. <head>  
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  4. <title></title>  
  5. <script src="AC_OETags.js" language="javascript"></script>  
  6.   
  7. </head>  
  8. <body bgcolor="#EBEAE5" leftmargin="0" topmargin="0">  
  9. <script language="JavaScript" type="text/javascript" src="history.js"></script>  
  10. <script language="javascript" type="text/javascript" src="chartType.js"></script>  
  11. <table width="770" border="0" cellspacing="0" cellpadding="0" align="center">  
  12.   <tr>  
  13.     <td></td>  
  14.   </tr>  
  15.   <tr>  
  16.   <td align="center">  
  17.     <script>  
  18.         sendParameters("Chart1", "Chart1", 800, 600, "2");  
  19.     </script>  
  20.   </td>  
  21.   </tr>  
  22. </table>  
  23. </body>  
  24. </html>  

 這個HTML頁面包含了AC_OETags.js和chartType.js。通過sendParameters方法向Flex應(yīng)用傳遞參數(shù),并將應(yīng)用嵌入網(wǎng)頁中顯示出來。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多