`
daoger
  • 浏览: 529712 次
  • 性别: Icon_minigender_1
  • 来自: 山东济南
社区版块
存档分类
最新评论

flex和后端的数据交互(一)--XML和HTTPService

    博客分类:
  • flex
阅读更多
最近学习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 version="1.0" encoding="utf-8"?>
<menus>
    <node label="Mail">
        <node label="Inbox"/>
        <node label="Personal Folder">
            <node label="Demo"/>
            <node label="Personal"/>
            <node label="Saved Mail"/>
            <node label="bar"/>
        </node>
        <node label="Calendar"/>
        <node label="Sent"/>
        <node label="Trash"/>
    </node>
</menus>

xml文件的读写我们可以用FileStream类来实现:
读取xml文件:
   var testXML:XML;
   var file:File = File.documentsDirectory.resolvePath("tree.xml");
   var fileStream:FileStream = new FileStream();
   fileStream.open(file, FileMode.READ);
   testXML = XML(fileStream.readUTFBytes(fileStream.bytesAvailable));
   fileStream.close();

写回xml文件
   var testXML:XML=<content>content</content>......;
   var file:File = File.documentsDirectory.resolvePath("tree.xml");
   var fileStream:FileStream = new FileStream();
   fileStream.open(file, FileMode.WRITE);
   var outputString:String = '<?xml version="1.0" encoding="utf-8"?>\n';
   outputString += testXML.toXMLString();
   fileStream.writeUTFBytes(outputString);
   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代码。
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" fontFamily="simsun" 
	fontSize="12" layout="absolute" width="242" height="442" creationComplete="loadXML()">
    <mx:Script>
          <![CDATA[
            import mx.collections.ArrayCollection; 
            import mx.rpc.events.ResultEvent;       
            public var loader:URLLoader=new URLLoader();
            public var menus:XML=new XML();         
            public function loadXML():void          
            {
                var request:URLRequest=new URLRequest("tree.xml");
                loader.load(request); 
                loader.addEventListener(Event.COMPLETE,completeHandle);
            }
            public function completeHandle(e:Event):void
            {
                menus=XML(loader.data);            
                var results:XMLList=menus.node;    
                tree.dataProvider=results; 
            }
          ]]>
    </mx:Script>

    <mx:Tree id="tree" x="10" y="35" width="218" height="397" labelField="@label" />
    <mx:Label x="10" y="10" text="Tree Nodes From XML File"/>
 </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程序的处理结果有关。
数据返回后的处理方法示例:
import mx.rpc.events.ResultEvent;                       
import mx.controls.Alert;                              

private function showResult(e:ResultEvent):void
{
    Alert.show(e.result as String);                    
}


来一个简单的例子会让你更加明白的!

这是客户端mxml的源代码:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" >
	<mx:Script>  
      <![CDATA[  
        import mx.rpc.events.ResultEvent;              
		import mx.controls.Alert;                   
		
		private var arr:Array=new Array();             
		private function addHandle():void           
		{
		    myHttp.url="http://localhost:8080/myflex/sum";                                                     
		    if(arr.length>0)                           
		        myHttp.url+="?";
		    for(var i:int=0;i<arr.length;i++)           
		    {
		        if(i!=arr.length-1)
		            myHttp.url+="num="+arr[i].para.toString()+"&";
		        else
		            myHttp.url+="num="+arr[i].para.toString();
		    }
		    Alert.show(myHttp.url);
		    myHttp.send();                       
		}
		
		private function addData():void         
		{
		    var obj:Object=new Object();           
		    obj.para=txtPara.text;                
		    arr.push(obj);                        
		    dg.dataProvider=arr;                   
		    txtPara.text="";                     
		    dg.validateNow();                      
		}
		
		private function delData():void         
		{
		    arr=new Array();                             
		    dg.dataProvider=arr;                 
		    dg.validateNow();                      
		}
		
		private function httpHandle(e:ResultEvent):void
		{
			lblResult.text=e.result.sumTag;
		}
        ]]>  
  	</mx:Script>  
	<mx:HTTPService id="myHttp" showBusyCursor="true" result="httpHandle(event);" useProxy="false"/>
	<mx:Panel title="测试HTTPService" width="368" height="334" x="78" y="30" layout="absolute">
	    <mx:Label text="叠加参数:" x="110" y="26"/>
	    <mx:TextInput id="txtPara" x="161" y="24" width="95"/> 
	    <mx:DataGrid id="dg" x="76" y="64" height="166" width="179">
	        <mx:columns>
	            <mx:DataGridColumn dataField="para" headerText="参数列表"/>
	        </mx:columns>
	    </mx:DataGrid>
	    <mx:Button label="添加" click="addData();" x="277" y="26"/>  
	    <mx:Button label="删除" click="delData();" x="277" y="64"/>  
	    <mx:Label text="叠加结果是:" x="58" y="253"/>
	    <mx:Label x="126" y="253" id="lblResult"/>  
	    <mx:Button label="计算" click="addHandle();" x="277" y="249"/>   
	</mx:Panel>
</mx:Application>


"http://localhost:8080/myflex/sum"是一个servlet的映射地址,actionscript方法addHandle将每一个数字参数添加到url映射地
址后面并且向服务器发送请求,addData方法把输入的数字显示到下方列表,delData方法删除整个列表,httpHandle方法处理服务器
的返回值。其中e.result.sumTag表示取得xml返回数据中sumTag标签中的内容。
以下是servlet中对接收参数的处理:
public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException
	{
		String[] para = request.getParameterValues("num");
		int sum = 0;
		if (para != null)
		{
			for (int i = 0; i < para.length; i++)
			{
				if (para[i] != null && !"".equals(para[i]))
				{
					sum = sum + Integer.parseInt(para[i]);
				}
			}
		}
		response.getWriter().print(
				"<?xml version=\"1.0\" encoding=\"utf-8\"?><sumTag>" + sum
						+ "</sumTag>");
	}


下面是例子运行的截图:


下一次学习总结一下<mx:WebService>组件和RemoteObject及其他的交互方式!
9
2
分享到:
评论
7 楼 lliiqiang 2013-05-24  
人们对于目标需要的需求明确的去做,对于目标以外的因素是随机的执行,只需做到目标即可.
6 楼 ANGEL花落寂 2012-05-10  
  
5 楼 hai2653068 2011-10-31  
mx:ZipCodeValidator     仅限中国 怎麽回事?
4 楼 hbing110 2009-04-01  
hbing110 写道

这几天正发愁没有个例子来看呢 谢谢.

原来也是想用httpService,可是却不知道怎么用.
3 楼 hbing110 2009-04-01  
这几天正发愁没有个例子来看呢
谢谢.
2 楼 tns1986 2009-02-17  
请问既然处理后返回的数据类型有数组型、XML型、Object等,为什么在java端需要response.getWriter().print(  
                "<?xml version=\"1.0\" encoding=\"utf-8\"?><sumTag>" + sum  
                        + "</sumTag>");  
这样写呢?可以不可以直接
response.getWriter().print(sum);或在doPost中直接调用另一个方法,直接return sum;
初学者,请指教
1 楼 seven_cuit 2008-12-24  
终于找到了,小弟跪谢

相关推荐

    Flex+SpringMVC HttpService 发送XML数据

    总结,Flex通过HttpService组件与SpringMVC应用配合,可以实现XML数据的发送和接收,完成前后端的数据交互。这种方式允许开发者充分利用XML的结构化特性,构建复杂的数据交换场景。在实际开发中,还需考虑错误处理、...

    flex与PHP数据交互教程

    Flex是Adobe公司开发的一种富互联网应用程序(RIA)框架,它主要使用ActionScript编程语言和MXML标记语言,用于创建交互式、动态的用户界面。PHP则是一种广泛使用的开源服务器端脚本语言,尤其适合Web开发,可以嵌入...

    flex完全自学手册-- 电子教案 PPT

    Flex是Adobe公司开发的一种用于构建富互联网应用程序(RIA)的技术,它基于ActionScript编程语言和MXML标记语言,主要用于创建交互式的、具有丰富图形效果的Web应用。本自学手册主要聚焦于Flex的学习与实践,通过...

    java 中使用Flex的HttpService的详细配置

    在Java开发中,Flex HttpService是一个强大的工具,用于在Adobe Flex客户端与服务器之间进行数据通信。这个服务允许Flex应用程序通过HTTP协议发送请求到后端服务器,并接收响应数据。本篇文章将深入探讨如何在Java...

    flex数据交互_方式

    在探讨“flex数据交互方式”这一主题时,我们首先需要理解Flex是什么以及它在数据交互中的...开发者需要熟悉如何有效地使用这些工具和技术,以便创建出既美观又实用的应用程序,同时确保良好的用户体验和数据交互性能。

    flex4与Java交互.docx

    这些交互方式允许Flex客户端与后端Java应用进行数据交换,从而实现丰富的用户界面和强大的业务逻辑处理。 1. Flex与普通Java类通信 - RemoteObject RemoteObject是Flex提供的一种与后端Java或.NET服务进行通信的...

    flex 解析xml文件 httpservice

    总的来说,Flex通过XML类和HTTPService组件提供了强大的功能,使开发者能够轻松地解析XML文件并从Web服务器获取数据。理解这些核心概念和API,对于开发Flex应用程序,尤其是涉及数据交互的项目至关重要。通过灵活...

    Flex与Java的交互

    Flex与Java的交互是跨平台应用开发中的常见技术组合,允许前端用户界面(UI)与后端业务逻辑进行高效沟通。在本文中,我们将深入探讨如何使用Flex 4与Java进行通信,并通过三种不同的方法实现这一目标:RemoteObject...

    flex4 httpservice 例子

    在提供的压缩包文件中,可能包含了一个名为`demo`的示例项目,该项目展示了如何在实际应用中使用上述步骤来实现Flex4的`HTTPService`来提取XML数据。通过查看和运行这个示例,你将更深入地理解如何在Flex4中使用`...

    Flex4.0 如何通过 HttpService和WebService与服务器进行通信

    HttpService和WebService是两种常用的方式,它们允许Flex客户端与基于HTTP或Web服务接口的后端系统进行数据交换。本篇文章将深入探讨如何利用Flex 4.0中的HttpService和WebService组件与Java Struts2框架构建的...

    flex httpservice 和 java通信 获取 java端的返回值

    本文将详细介绍如何使用Flex的HTTPService组件与Java服务进行交互,并获取Java端的返回值。首先,让我们了解一下Flex和Java通信的基本原理。 Flex是一款基于ActionScript 3的开源框架,用于创建富互联网应用程序...

    纯flex网站前台(httpservice、webservice进行数据交互)

    4. **数据交互流程**:在Flex应用中,通常会创建一个HTTPService或WebService对象,配置其URL、方法和其他参数,然后定义一个事件监听器来处理返回的数据。当用户触发某个操作时,如点击按钮,服务会被调用,然后在...

    FLEX与JSP结合并测试HTTPService与java用XML通信.doc

    在本过程中,我们将看到如何配置Web项目以支持Flex和Struts框架,以及如何设置HTTPService来处理XML数据。 1. **创建Web项目** 首先,创建一个基于J2EE 1.4的Web项目。这通常涉及在IDE如Eclipse或IntelliJ IDEA中...

    FLEX数据传输与交互

    2. Model-View-Controller(MVC):FLEX鼓励使用MVC设计模式,分离业务逻辑、视图和数据模型。例如,Bindable注解可以标记可观察的属性,当这些属性变化时,视图会自动更新。 3. State管理:FLEX支持状态管理,允许...

    FLEX与JSP结合并测试HTTPService与java用XML通信

    在FLEX中,我们可以创建一个HTTPService实例,设置其URL指向JSP或Java后端的处理方法,并在接收到响应时解析返回的XML数据。 总的来说,FLEX与JSP的结合利用了FDS和HTTPService,实现了富互联网应用程序(RIA)与...

    flex 文档以及后台数据交互详解

    Flex是Adobe公司开发的一种富互联网...通过深入理解其文档和数据交互机制,开发者能够构建出与后台服务器紧密协作、用户体验优秀的应用。无论你是初学者还是有经验的开发者,持续学习和实践都是提升Flex技能的关键。

    Flex+HTTPService 例子

    因此,我们将逐步讲解创建一个简单的Flex应用,使用HTTPService与Java后台进行数据交互的过程: 1. **创建Flex项目**:首先,你需要安装Adobe Flex Builder或使用其他支持Flex开发的IDE,如IntelliJ IDEA或Flash ...

    flex4与Java交互.pdf

    Flex 4与Java的交互是构建RIA的关键部分,通过RemoteObject、HTTPService和WebService,开发者可以灵活地与Java后端进行数据交换。RemoteObject适用于直接调用Java对象的方法,HTTPService适合于通用的HTTP请求,而...

    Flex与Servlet之间数据的交互

    Flex与Servlet的数据交互主要通过AMF(Action Message Format)协议完成,这是一种高效的二进制格式,能够快速传输对象和数据。Flex客户端通过HTTP或HTTPS协议向Servlet发送AMF请求,Servlet接收到请求后处理数据,...

Global site tag (gtag.js) - Google Analytics