`
风过有声
  • 浏览: 4332 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论
阅读更多

Flex与FluorineFx传值

   最近学习了一下Flex + FluorineFx,其中遇到了一个问题,就是FluorineFx与Flex之间怎样传值,为了这个问题在网上找了不少资料,然后有自己试了一下,下面把我的成果分享一下。

(1)传类对象,我这里没成功,不知为啥,但是网上有很多成功示例。

(2)传DataSet ,网上说加上这句话 [DataTableType( "ServiceLibrary.Book")]就行,但是我试过之后

不可以,也有说加上[DataSetType("ServiceLibrary.Book")]的,但是我试过之后在.Net端就没数据了,更别提

          Flex端了。

(3)传DataTable,成功了,关键是加上 [DataTableType( "ServiceLibrary.Book")]。

(4)传XmlDocument,成功了。

(5)传String,成功了,其实String保存的也是XML形式,跟XmlDocument差不多。

(6)传 List<>,成功了,网上也有很多人都用这种方式。

 

FluorineFx端的Service

 

namespace ServiceLibrary
{
    /// <summary>
    /// Fluorine sample service.
    /// </summary>
    [RemotingService("Fluorine sample service")]
    public class Sample
    {
        public Sample()
        {
        }

        public string Echo(string text)
        {
            return "Gateway echo: " + text;
        }
        /// <summary>
        /// 还有问题
        /// </summary>
        /// <returns></returns>
        public Book GetBook()
        {
            return new Book
            {
                ID = 2,
                Name = "让子弹飞一会",
                Author = "姜文",
                Price = 32
            };
        }
        /// <summary>
        /// 还有问题,不能传值
        /// </summary>
        /// <returns></returns>
        [DataTableType("Books", "ServiceLibrary.Book")]
        public DataSet GetDataSet()
        {
            DataSet ds = new DataSet("DS");
            DataTable dt = ds.Tables.Add("Books");
            dt.Columns.Add("ID", typeof(int));
            dt.Columns.Add("Name", typeof(string));
            dt.Columns.Add("Author", typeof(string));
            dt.Columns.Add("Price", typeof(double));

            DataRow dr = dt.NewRow();
            dr["ID"] = 1;
            dr["Name"] = "《Flex游戏开发》";
            dr["Author"] = "张三";
            dr["Price"] = 54.85;
            dt.Rows.Add(dr);

            dr = dt.NewRow();
            dr["ID"] = 2;
            dr["Name"] = "《Flash游戏开发》";
            dr["Author"] = "李四";
            dr["Price"] = 65.50;
            dt.Rows.Add(dr);

            return ds;
        }
        public XmlDocument GetXML()
        {
            DataSet ds = new DataSet("DS");
            DataTable dt = ds.Tables.Add("Books");
            dt.Columns.Add("ID", typeof(int));
            dt.Columns.Add("Name", typeof(string));
            dt.Columns.Add("Author", typeof(string));
            dt.Columns.Add("Price", typeof(double));

            DataRow dr = dt.NewRow();
            dr["ID"] = 1;
            dr["Name"] = "《Flex游戏开发》";
            dr["Author"] = "张三";
            dr["Price"] = 54.85;
            dt.Rows.Add(dr);

            dr = dt.NewRow();
            dr["ID"] = 2;
            dr["Name"] = "《Flash游戏开发》";
            dr["Author"] = "李四";
            dr["Price"] = 65.50;
            dt.Rows.Add(dr);

            String xmlStr = "<?xml version=\"1.0\" encoding=\"utf-8\"?> \n";
            xmlStr += ds.GetXml();
            XmlDocument xml = new XmlDocument();
            xml.LoadXml(xmlStr);
            return xml;
        }
        public String GetStringXML()
        {
            DataSet ds = new DataSet("DS");
            DataTable dt = ds.Tables.Add("Books");
            dt.Columns.Add("ID", typeof(int));
            dt.Columns.Add("Name", typeof(string));
            dt.Columns.Add("Author", typeof(string));
            dt.Columns.Add("Price", typeof(double));

            DataRow dr = dt.NewRow();
            dr["ID"] = 1;
            dr["Name"] = "《Flex游戏开发》";
            dr["Author"] = "张三";
            dr["Price"] = 54.85;
            dt.Rows.Add(dr);

            dr = dt.NewRow();
            dr["ID"] = 2;
            dr["Name"] = "《Flash游戏开发》";
            dr["Author"] = "李四";
            dr["Price"] = 65.50;
            dt.Rows.Add(dr);

            String xmlStr = "<?xml version=\"1.0\" encoding=\"utf-8\"?> \n";
            xmlStr += ds.GetXml();
            return xmlStr;
        }
        [DataTableType("ServiceLibrary.Book")]
        public DataTable GetDataTable()
        {
            DataTable dt = new DataTable("Books");
            dt.Columns.Add("ID", typeof(int));
            dt.Columns.Add("Name", typeof(string));
            dt.Columns.Add("Author", typeof(string));
            dt.Columns.Add("Price", typeof(double));

            DataRow dr = dt.NewRow();
            dr["ID"] = 1;
            dr["Name"] = "《Flex游戏开发》";
            dr["Author"] = "张三";
            dr["Price"] = 54.85;
            dt.Rows.Add(dr);

            dr = dt.NewRow();
            dr["ID"] = 2;
            dr["Name"] = "《Flash游戏开发》";
            dr["Author"] = "李四";
            dr["Price"] = 65.50;
            dt.Rows.Add(dr);

            return dt;
        }
        public List<Book> GetList()
        {
            List<Book> list = new List<Book>();
            Book book = new Book();
            book.ID = 1;
            book.Name = "《Flex游戏开发》";
            book.Author = "张三";
            book.Price = 50;
            list.Add(book);

            book = new Book();
            book.ID = 1;
            book.Name = "《Flash游戏开发》";
            book.Author = "李四";
            book.Price = 60;
            list.Add(book);
            return list;
        }
    }
    public class Book
    {
        public Book() { }
        public int ID { get; set; }
        public string Name { get; set; }
        public string Author { get; set; }
        public double Price { get; set; }
    }

 Flex调用代码

 

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
	<mx:Script>
		<![CDATA[
			import mx.collections.ArrayCollection;
            import mx.controls.Alert;
            import mx.rpc.events.FaultEvent;
            import mx.rpc.events.ResultEvent;
            import mx.rpc.xml.SimpleXMLDecoder;
            import mx.utils.ObjectUtil;
            import mx.utils.ArrayUtil;
            [Bindable]
            private var book:BookVO;
            [Bindable]
            private var books:ArrayCollection = null;
            private function resultEcho(event:ResultEvent):void
            {
                // 测试成功!已经获得数据。
                trace("event.result:" + event.result);
                Alert.show(event.result as String, "Result");
            }

            private function faultOperation(event:FaultEvent):void
            {
                // 如果测试失败!显示无法获得数据。
                trace("event.message:" + event.message);
                Alert.show("无法获得数据!", "错误"); 
            }
            // 没实现,返回的对象为空
            private function onGetBook(event:ResultEvent):void
            {
            	book = event.result as BookVO;
            	Alert.show(event.result.ID as String, "Result");
            } 
            // 成功 关键是加上 [DataTableType("Flex.CustomerVO")]
            // 要在 WebService加上 [DataTableType("Flex.CustomerVO")]
            private function onGetDataTable(event:ResultEvent):void
            {
            	//---------WebService解析方法---------
            	//books = event.result.Tables.Books.Rows as ArrayCollection;
            	//bookGrid.dataProvider=this.service.GetDataTable.lastResult.Tables.Books.Rows;
            	//---------WebService解析方法---------
            	books = event.result as ArrayCollection;
            	bookGrid.dataProvider= books;   	
            }
            // 没实现,返回的对象为空
            // 在 WebService加上 [DataTableType("Flex.CustomerVO")] 在webservice成功,在这不好使
            // 在 WebService加上 [DataSetType("Flex.CustomerVO")] 在webservice 和 在 这都不好使
            private function onGetDataSet(event:ResultEvent):void
            {   //---------WebService解析方法---------
            	//books = this.service.GetDataSet.lastResult.diffgram.DS.Books as ArrayCollection;
                //books = event.result.Books.serverInfo.initialData as ArrayCollection;
                //---------WebService解析方法---------
                books = event.result as ArrayCollection;
                bookGrid.dataProvider= books;  
            }
            // 成功!!!!!!!!!!!!!!
            private function onGetList(event:ResultEvent):void      
            {
            	books = service.GetList.lastResult as ArrayCollection;
            	bookGrid.dataProvider= books;
            }
            // 成功!!!!!!!!!!!!!!
            // Webservice端是  XmlDocument 这种格式
            private function onGetXML(event:ResultEvent):void 
            {
            	var xmltree:XML = new XML();
            	xmltree = event.result as XML;
                books = new ArrayCollection();
                 books.removeAll();
                 for each(var xml:XML in xmltree.children())
         	     {
         		     books.addItem(xml);
         	     } 
                 bookGrid.dataProvider= books; //把数据源绑定到列表中 
            }
            // 希望XMLDocument 转化成 ArrayCollection
            // 没试呢
            private function convertXmlToArrayCollection( file:String ):ArrayCollection
            {
                var xml:XMLDocument = new XMLDocument( file );
                var decoder:SimpleXMLDecoder = new SimpleXMLDecoder();
                var data:Object = decoder.decodeXML( xml );
                var array:Array = ArrayUtil.toArray(data.list.items);
                return new ArrayCollection(array);
            }
            // 成功!!!!!!!!!!!!!!
            // Webservice端是  String 这种格式,但是String存的是 XML
            private function onGetStringXML(event:ResultEvent):void 
            {
            	/* books如果为空的话就会出现不能对空对象进行操作,所以每次使用先 New 一下*/
                 var xmltree:XML = new XML(event.result.toString());
                 books = new ArrayCollection();
                 books.removeAll();
                 for each(var xml:XML in xmltree.children())
         	     {
         		     books.addItem(xml);
         	     } 
                 bookGrid.dataProvider= books; //把数据源绑定到列表中
            }
		]]>
	</mx:Script>
   
   <!--destination必须和WebService中的服务名一样-->
   <!--source是服务所在的class-->
   <mx:RemoteObject id="service" destination="fluorine" source="ServiceLibrary.Sample"
   	fault="faultOperation(event)" >
   	<mx:method name="Echo" result="resultEcho(event)"/>
   	<mx:method name="GetBook" result="onGetBook(event)"/>
   	<mx:method name="GetDataSet" result="onGetDataSet(event)"/>
   	<mx:method name="GetDataTable" result="onGetDataTable(event)"/>
   	<mx:method name="GetList" result="onGetList(event)"/>
   	<mx:method name="GetXML" result="onGetXML(event)"/>
   	<mx:method name="GetStringXML" result="onGetStringXML(event)"/>
   	</mx:RemoteObject>
 
    <mx:VBox paddingLeft="10" paddingRight="10" paddingTop="10" paddingBottom="10" height="162" width="915" >
	    <mx:HBox>
	        <mx:TextInput id="txt" />
	        <mx:Button label="Echo" click="service.Echo(txt.text)" />
	    </mx:HBox>
	    <mx:ControlBar height="116" width="867"> 
         <mx:Button label="DataTable" click="service.GetDataTable()"/> 
         <mx:Button label="Book" click="service.GetBook()"/>
         <mx:Button label="List" click="service.GetList()"/>
         <mx:Button label="XML" click="service.GetXML()"/>
         <mx:Button label="StringXML" click="service.GetStringXML()"/>
         <mx:Button label="DataSet" click="service.GetDataSet()"/> 
         <mx:TextInput width="302" text="{book.Name+book.Author+book.Price}"/>
        </mx:ControlBar> 
    </mx:VBox>
    <mx:DataGrid x="10" y="170" width="543" height="147" id="bookGrid" > 
     <mx:columns> 
             <mx:DataGridColumn headerText="编号" dataField="ID"/> 
             <mx:DataGridColumn headerText="书名" dataField="Name"/> 
             <mx:DataGridColumn headerText="作者" dataField="Author"/> 
             <mx:DataGridColumn headerText="价格" dataField="Price"/> 
    </mx:columns> 
 </mx:DataGrid>
</mx:Application>
分享到:
评论

相关推荐

    Newtonsoft.Json.Net 包括: .NET 2, .NET 3.5, .NET 4, .NET 4.5

    Json.NET 描述: json。 网络是一个流行的高性能JSON为。NET框架 灵活的JSON序列化器对之间的转换。净对象和JSON linq到JSON用于手动阅读和写作JSON 高性能,速度比。净的内置JSON序列化器 写缩进,容易阅读JSON JSON和...

    .NET Reactor 4.9 破解版

    .NET Reactor是一款功能强大的代码保护以及许可授权管理系统软件,主要用于开发人员保护其.NET软件程序,.NET Reactor支持所有支持.NET编译的程序开发语言。 .NET Reactor 4.9是目前最新版本,由大神yoza破解,亲测...

    .Net Framework卸载工具

    如果.NET卸载不完全会导致以后的版本无法安装等问题,.NET Framework Cleanup Tool是一个专用于卸载、清除掉计算机中不同版本.NET框架的免费小软件。支持所有语言的.NET 它能删除与.NET相关的文件,并且还能自动将...

    Newtonsoft.Json.Net的各个版本适用.net2.0 .net3.5 .net4.0 .net4.5

    标题提及的“Newtonsoft.Json.Net的各个版本适用.net2.0 .net3.5 .net4.0 .net4.5”,意味着这个库的各个发行版本能够与不同的.NET Framework版本兼容。让我们逐一解析这些版本: 1. **.NET 2.0**:这是.NET ...

    asp.net 后台管理系统界面

    ASP.NET 是微软公司开发的一种用于构建 Web 应用程序的框架,它允许开发者使用.NET Framework 或.NET Core 进行服务器端编程。在这个“asp.net 后台管理系统界面”中,我们主要关注的是如何利用 ASP.NET 来设计和...

    微软官方.NET修复工具Microsoft .NET Framework Repair Tool

    .NET Framework是微软开发的一个软件框架,它为开发者提供了一个用于构建、部署和运行应用程序的平台。Microsoft .NET Framework Repair Tool是微软官方推出的一款专门用于解决.NET Framework安装或运行时遇到问题的...

    .NET4.0离线安装包

    .NET Framework 4.0是微软开发的一个重要组件,它为开发者提供了一个运行各种应用程序所需的环境。这个离线安装包使得用户在没有网络连接的情况下也能安装.NET Framework 4.0,对于那些网络不稳定或者速度较慢的环境...

    ASP.NET AJAX程序设计——第I卷:服务器端ASP.NET 2.0 AJAX Extensions与ASP.NET AJAX Control Toolkit 源代码

    本卷从最易于理解和使用的那部分入手,介绍ASP.NET AJAX框架中能够与传统ASP.NET无缝对接的服务器端部分,包括服务器端ASP.NET AJAX Extensions与ASP.NET AJAX Control Toolkit。这部分内容不需要读者有任何的客户端...

    规则引擎Drools.NET移植版

    **规则引擎Drools.NET移植版** Drools是一款强大的业务规则管理系统,源自Java社区,以其灵活、高效和可扩展的特性而广受赞誉。它允许开发者将业务逻辑以规则的形式编写,使得业务规则可以独立于应用程序代码进行...

    多个.net项目实例

    《.NET项目实例详解》 在.NET框架下,开发者可以构建各种类型的应用程序,包括桌面应用、Web应用、移动应用以及服务端应用等。本文将深入探讨多个.NET项目实例,旨在为初学者提供宝贵的参考资料,帮助他们更好地...

    ASP.NET 4.5入门经典:涵盖C#和VB.NET(第7版) 源码

    这是第六版的介绍《ASP.NET 4入门经典:涵盖C#和VB.NET(第6版)》内容简介:ASP.NET是.NET Framework的一部分,用于构建内容丰富的动态Web站点。其最新的版本ASP.NET 4对上一版进行了许多改进,包括增强了Web窗体,并...

    ASP.NET Core 3.1中文教程.pdf

    ASP.NET Core 3.1 中文教程 ASP.NET Core 是 Microsoft 开发的一款免费、开源的 Web 应用程序框架,适用于开发跨平台的 Web 应用程序。本文档提供了 ASP.NET Core 3.1 的中文使用手册,涵盖了ASP.NET Core 的各种...

    .NET FRAMEWORK4.5.2开发工具包

    用于VisualStudio2019以上版本开发.net framework 4.5.2框架的代码。适用于64位操作系统~ 从Visual Studio 2022开始,‌Microsoft不再包含.NET Framework 4.0到4.5.1的.NET Framework组件,‌因为这些版本不再受到...

    SAP.Net Connector 3.0

    SAP .Net Connector 3.0 是一个关键的软件组件,它允许.NET应用程序与SAP系统进行无缝集成和通信。这个连接器提供了丰富的接口和功能,使得开发人员能够利用C#、VB.NET或其他.NET语言来访问SAP的功能,执行业务逻辑...

    C#用S7.net

    标题 "C#用S7.net" 指的是在C#编程环境中利用S7.net库进行西门子PLC(SIMATIC S7系列)通信的知识点。S7.net是一个用于与西门子PLC进行数据交换的.NET组件,它允许开发者在C#等.NET支持的语言中实现对PLC的读写操作...

    Quartz.NET 调度系统 demo

    前言:8月份翻译了Quartz.NET的官方课程:开源的作业调度框架 - Quartz.NET, 有的朋友抱怨难用,确实,目前Qiartz.NET的最新版本还是0.6,还存在很多bug和不完善的地方。本文使用一系列代码示例介绍 Quartz.NET API...

    .NET FrameWork 3.5(包含.Net2.0,.Net3.0).zip

    .NET Framework是微软开发的一个软件框架,它为开发者提供了一个用于构建、部署和运行基于Windows的应用程序的平台。此框架自2002年发布以来,经历了多次版本更新,包括.NET Framework 1.0到.NET Framework 4.8等多...

    .NET 免费Excel类库-Free Spire.XLS for .NET_10.1.zip

    使用 Free Spire.XLS for .NET,开发人员可以在 .NET(C#, VB.NET, ASP.NET, .NET Core) 应用程序中快速对 Excel 文档进行各种编程操作,如根据模板创建新的 Excel 文档,编辑现有 Excel 文档以及对 Excel 文档进行...

    .NET6.0官方中文文档.pdf

    《.NET 6.0官方中文文档》是全面深入学习.NET 6.0的权威指南,由微软技术专家精心编撰,总计4518页,涵盖了从环境配置到实战开发再到高级理论的全方位内容。本文将基于文档的部分内容,解析.NET 6.0的关键知识点。 ...

    FastReport.net v2022.3.9 完美补丁,支持.Net6的版本

    FastReport.NET是一款强大的报表设计和开发工具,专为.NET Framework和.NET Core应用程序设计。它提供了丰富的功能,使得开发者能够轻松创建、设计和打印各种复杂的报表,包括表格、图表、图像和文本等。在2022.3.9...

Global site tag (gtag.js) - Google Analytics