获取并显示数据
为了向我们的程序提供数据,Adobe Flex包含特别为与HTTP服务器,网络服务或者是远程对象服务(Java对象)进行交互的而设计的组件。这些组件被称之为远程过程调用(RPC)服务组件。
与Adobe ColdFusion,PHP或者是相似的服务器技术创建的程序不同,Flex程序并能直接与一个数据库进行交互。他们使用服务与数据进行交互。例如,我们可以在Flex文件中插入一个HTTP服务来与ColdFusion文件进行交互,从而从一个MySQL数据取得数据,转换成为XML,然后发送到我们的Flex程序。
在这一节,我们将会创建一个简单的获取最近留言并且允许用户读取留言的最前几条的BlogReader程序。我们可以使用一个名为HTTPService的RPC服务组件从一个RSS获取数据,然后我们将数据绑定到一个Label,DataGrid,TextArea和LinkButton控件。

设置我们的工程
在我们开始这一节之前,我们完成下面的任务:
如果我们没有创建工程,创建Lessons工程。
确保打开了自动构建选项。
回顾到远程数据源的访问
出于安全的原因,运行在客户端计算机上的Flash播放中的程序只有在满足下面的条件时才可以访问远程数据源:
1 我们程序所编译的SWF文件与远程数据源在同一个域。
2 我们使用代理并且我们的SWF文件与代理在同一个服务器上。
Adobe Flex数据服务为Flex程序提供了一个完整的代理管理系统。我们也可以使用Web脚本语言,例如ColdFusion,JSP,PHP或者ASP创建一个简单的代理服务。
3 在远程数据源的服务器上安装一个crossdomain.xml文件。crossdomain.xml文件允许其他域的SWF文件
访问数据源。
在这一节所使用的数据源位于一个配置了crossdomain.xml文件的域。所以,Flash播放器可以访问远程数据。
插入与定位Blog Reader控件
在这一节,我们创建我们的Blog-Reader程序的布局。
1 在浏览视图中选择Lessons工程,选择File>New>MXML Application创建一个名为BlogReader.mxml的程序文件。
2 通过在浏览视图中右击这个文件并从弹了菜单中选择Set As Default Appliction将设置为默认编译的程序文件。
3 在MXML编辑器的设计模式中,从内容视图的布局类中拖放一个面板容器,并且将其设置为如下面的属性:
Title: Blog Reader
Width: 475
Height: 400
X: 10
Y: 10
4 在设计模式中,通过在组件视图中拖放添加如下的控件:
DataGrid
TextArea
LinkButton
5 使用鼠标将这些控件布局为垂直,左对齐的列。
6 选择DataGrid控件设置为如下的属性:
Id: dgPosts
X: 20
Y: 20
7 选择TextArea控件设置为如下的属性:
X: 20
Y: 175
Width: 400
8 选择LinkButton控件设置如下的属性:
Label: Read Full Post
X: 20
Y: 225
布局效果如下图所示:

9 切换到代码模式。BlogReader.mxml应包含下面的MXML代码:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    <mx:Panel x="10" y="10" width="475" height="400" layout="absolute" title="Blog Reader">
        <mx:DataGrid id="dgPosts" x="20" y="20" width="400">
            <mx:columns>
                <mx:DataGridColumn headerText="Column 1" dataField="col1"/>
                <mx:DataGridColumn headerText="Column 2" dataField="col2"/>
                <mx:DataGridColumn headerText="Column 3" dataField="col3"/>
            </mx:columns>
        </mx:DataGrid>
        <mx:TextArea x="20" y="175" width="400"/>
        <mx:LinkButton x="20" y="225" label="Read Full Post"/>
    </mx:Panel>
</mx:Application>
10 保存文件,待到构建完成时运行程序。
程序运行效果如下图所示:

下一步就是获取最近的Blog留言信息。我们可以使用名为HTTPService的RPC服务组件来完成这个任务。
插入HTTPService组件
对于这一节的BlogReader程序,我们将会从Matt Chotion的Bloghttp://www.adobe.com/go/mchotinblog获取留言信息。Matt是Flex开发团队的产品经理,并且在他的Blog写有关Flex的内容。
我们可以使用HTTPService组件来访问Blog的XML并且获取最近的留言信息。这个组件可以让我们发送一个GET或是POST请求,然后获取响应中的数据。
1 在代码模式中,在<mx:Application>标签之后加入下面的<mx:HTTPService>标签。
<mx:HTTPService
    id="feedRequest"
    url="http://weblogs.macromedia.com/mchotin/index.xml"
    useProxy="false"/>
url属性指定了请求文件的位置,在这种情况下是Matt Chotion Blog的RSS 2.0。在编写本指南时,这个URL是可用的,但是我们应检测是否发生了改变。我们可以使用在http://www.adobe.com/go/mchotinblog列出的最新的RSS2.0的地址。
useProxy指明了我们不希望使用服务器上的代理。Matt的Blog位于一个配置了crossdomain.xml的域,所以Flash播放器可以访问这个服务器上的远程数据源,包括RSS。
下一步就是要让程序向指定的URL发送一个请求。我们决定在程序启动时自动发送一个请求。如下面所示。
2 在<mx:Application>标签中添加下面的creationComplete属性:
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="feedRequest.send()">
当我们的程序启动完成时,HTTPService组件的send()方法就会被调用。这个方法向指定的URL发送了一个GET或是POST语法,并且会返回一个HTTP响应。在这种情况下,RSS返回XML数据。
下一步,我们希望检测程序是否成功的取得了RSS数据。我们可以通过将数据绑定到Label控件来做到,如下所示。
3 在<mx:Panel>标签中,将title属性替换为下面的绑定表达式:
title="{feedRequest.lastResult.rss.channel.title}"
这个表达式将title域绑定到Panel控件。这个表达式反映了XML的结构。当XML返回到HTTPService组件时,这个组件将其解析成名为lastResult的ActionScript对象。lastResult的结构是XML文档结构的镜像。为了检测XML的结构,下载RSS的XML文件(http://www.adobe.com/go/flex_blogfeed)并且在浏览器中打开。
XML的通常结构如下所示:

<rss>
    <channel>
        <title>
        other child nodes of <channel>
        <item>
            <title>
            other child nodes of <item>
        </item>
        ...
一些节点具有包含数据的孩子节节点,包括channel节点的"title"孩子节点。HTTPService组件的lastResult对象反映了这种结构:
feedRequest.lastResult.rss.channel.title
我们代码应是如下的样子:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
    creationComplete="feedRequest.send()" layout="absolute">
    <mx:HTTPService
        id="feedRequest"
        url="http://weblogs.macromedia.com/mchotin/index.xml"
        useProxy="false" />
    <mx:Panel x="10" y="10" width="475" height="400" title="{feedRequest.lastResult.rss.channel.title}">
        <mx:DataGrid id="dgPosts" x="20" y="20" width="400">
            <mx:columns>
                <mx:DataGridColumn headerText="Column 1" dataField="col1"/>
                <mx:DataGridColumn headerText="Column 2" dataField="col2"/>
                <mx:DataGridColumn headerText="Column 3" dataField="col3"/>
            </mx:columns>
        </mx:DataGrid>
        <mx:TextArea x="20" y="175" width="400"/>
        <mx:LinkButton x="20" y="225" label="Read Full Post"/>
    </mx:Panel>
   
</mx:Application>
4 保存这个文件,待到构建完成后运行这个程序。
这样就会打开浏览器来运行这个程序。Blog的标题,Matt Chotin,就会作为Panel控件的标题出现,这样就表这个程序成功的从RSS取得了相应的数据信息。
处理DataGrid控件
在我们的程序中,我们希望DataGrid控件显示最近留言的标题以及发表日期。
1 在代码模式中,在<mx:DataGrid>标签中添加下面的dataProvider属性:
<mx:DataGrid x="20" y="20" id="dgPosts" width="400" dataProvider="{feedRequest.lastResult.rss.channel.item}">
我们希望名为item的XML节点向DataGrid控件提供数据。这个节点在XML中是重复的,所以在DataGrid也是重复的。
2 在第一个<mx:DataGridColumn>标签中,添加下面的headerText和dataField属性值:
<mx:DataGridColumn headerText="Posts" dataField="title"/>
我们希望在DataGrid控件的第一列显示留言的标题。我们通过指明XML中包含title数据的域来做到,并且将这个域作为dataField属性值。在dataProvider属性指定的XML节点中,名为title的子节点包含我们希望的信息。
3 在第二个<mx:DataGridColumn>标签中,输入下面的headerText,dataField以及width属性值:
<mx:DataGridColumn headerText="Date" dataField="pubDate" width="150"/>
我们希望在DataGrid的第二列显示留言发表的日期。在这种情况下,包含数据的域名为pubDate。
4 删除第三个<mx:DataGridColumn>标签,因为我们并不需要第三列。
最终的程序看起来应是如下的样子:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
    creationComplete="feedRequest.send()" layout="absolute">
    <mx:HTTPService
        id="feedRequest"
        url="http://weblogs.macromedia.com/mchotin/index.xml"
        useProxy="false"/>
    <mx:Panel x="10" y="10" width="475" height="400" title="{feedRequest.lastResult.rss.channel.title}">
        <mx:DataGrid id="dgPosts" x="20" y="20" width="400" dataProvider="{feedRequest.lastResult.rss.channel.item}">
            <mx:columns>
                <mx:DataGridColumn headerText="Posts" dataField="title"/>
                <mx:DataGridColumn headerText="Date" dataField="pubDate" width="150"/>
            </mx:columns>
        </mx:DataGrid>
        <mx:TextArea x="20" y="175" width="400"/>
        <mx:LinkButton x="20" y="225" label="Read Full Post"/>
    </mx:Panel>
   
</mx:Application>
5 保存文件,待到程序编译完成时,运行这个程序。
程序的运行效果如下:
Blog标题以及日期应出现在DataGrid控件中,表明程序成功的从RSS取得了数据信息。
显示选择的列
当用户在DataGrid控件中选择了一条留言,我们希望程序在TextArea控件中显示这条留言的最前几行。在XML的item节点中,这些信息包含在名为description的域中。
1 在源码模式下,在<mx:TextArea>标签中输入下面的htmlText属性:
<mx:TextArea x="20" y="175" width="400"
    htmlText="{dgPosts.selectedItem.description}" />
对于DataGrid组件中的第一个选择的item,description域的值将会作为htmlText属性的值。htmlText属性可以让我们显示HTML格式的文本。
2 保存文件,待到程序编译完成时,运行程序。
点击DataGrid控件中的条目时,每条留言的最前几行就会出现在TextArea控件中。
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
    creationComplete="feedRequest.send()" layout="absolute">
 
    <mx:HTTPService
        id="feedRequest"
        url="http://weblogs.macromedia.com/mchotin/index.xml"
        useProxy="false" />
    <mx:Panel x="10" y="10" width="475" height="400" title="{feedRequest.lastResult.rss.channel.title}">
        <mx:DataGrid id="dgPosts" x="20" y="20" width="400" dataProvider="{feedRequest.lastResult.rss.channel.item}">
            <mx:columns>
                <mx:DataGridColumn headerText="Posts" dataField="title"/>
                <mx:DataGridColumn headerText="Date" dataField="pubDate" width="150" />
            </mx:columns>
        </mx:DataGrid>
        <mx:LinkButton x="20" y="225" label="Read Full Post" click="navigateToURL(new URLRequest(dgPosts.selectedItem.link));"/>
   
        <mx:TextArea x="20" y="175" width="400"/>
       
    </mx:Panel>
   
</mx:Application>
DataGrid控件中选定条目的link域的值,dgPosts.selectedItem.link,指定为navigateToURL()方法的参数,当用点击时就会调用这个方法。navigateToURL()方法在一个新的浏览器窗口中装入一个文档。
2 保存文件,待到Flex Builder完成程序编译时,运行这个程序。
点击DataGrid控件中的一个条目并且点击Read Full Post链接时,就会打开一个新的浏览器窗口并且显示全部的留言信息。
在这一部分,我们使用名为HTTPService的RPC服务组件来从RSS获取信息,然后我们将这些信息绑定到Labe,DataGrid,TextArea以及LinkButton控件。
附完整代码:
环境搭建:MyEclipse 6.5+Flex Builder 3 Plug-in
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="feedRequest.send()"
	layout="absolute">
	<mx:HTTPService id="feedRequest"
		url="http://weblogs.macromedia.com/mchotin/index.xml" useProxy="false"/>
	<mx:Panel x="10" y="10" width="475" height="400" layout="absolute"
		title="{feedRequest.lastResult.rss.channel.title}">
		<mx:DataGrid x="20" y="20" id="dgPosts" width="400"
			dataProvider="{feedRequest.lastResult.rss.channel.item}">
			<mx:columns>
				<mx:DataGridColumn headerText="Posts" dataField="title"/>
				<mx:DataGridColumn headerText="Date" dataField="pubDate"
					width="150"/>
			</mx:columns>
		</mx:DataGrid>
		<mx:TextArea x="20" y="175" width="400" htmlText="{dgPosts.selectedItem.description}"/>
		<mx:LinkButton x="20" y="225" label="Read Full Post" click="navigateToURL(new URLRequest(dgPosts.selectedItem.link))"/>
	</mx:Panel>
</mx:Application>
 

Felx之HTTPService的更多相关文章

  1. Flex HTTPService json

    import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; import mx.rpc.http.HTTPService; i ...

  2. osgi: HttpService A null service reference is not allowed.

    最近在学习osgi,在练习HttpService的过程中,一直出现“A null service reference is not allowed”这样的报错,代码本身没有问题,在网上也搜了不少地方, ...

  3. Flex httpservice返回值类型和处理 (转)

    这两天在考虑flex与后端java服务交互的问题.在采用BlazeDS的Remote Object方式,还是传统的http service方式之间徘徊了一段时间 采用BlazeDS的Remote Ob ...

  4. Flex之HTTPService组件调用

    1.采用<s:HTTPService>标签来实现: <?xml version="1.0" encoding="utf-8"?>< ...

  5. 基于Flex的HTTPService(GET和POST)

    一.基于GET的HTTPService: <?xml version="1.0" encoding="utf-8"?><mx:Applicat ...

  6. HttpService

    // // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler ...

  7. HttpService与WebService的差异

    httpservice通过post和get得到你想要的东西webservice就是使用soap协议得到你想要的东西,相比httpservice能处理些更加复杂的数据类型 当你要调用一个你本服务的内容的 ...

  8. Flex远程访问获取数据--HTTPService

    编写service类: package services { import com.adobe.serialization.json.JSON; import log.LogUtil; import ...

  9. Felx之菜单导航

    Felx之菜单导航 环境搭建:MyEclipse 6.5+Flex Builder 3 Plug-in <?xml version="1.0" encoding=" ...

随机推荐

  1. Ask DevOps: Top 5 Business Alternatives to Splunk

    https://siliconangle.com/blog/2012/11/20/ask-devops-top-5-business-alternatives-to-splunk/

  2. 洛谷 P3671 [USACO17OPEN]Where's Bessie? 贝西在哪呢

    P3671 [USACO17OPEN]Where's Bessie? 贝西在哪呢 题目背景 农夫John正在测试一个他新发明的全自动寻找奶牛无人机,它能够照一张农场的图片然后自动找出奶牛的位置. 不幸 ...

  3. 多线程02---pThread简单介绍

    1.简单介绍 pthread 是属于 POSIX 多线程开发框架. 它是c语言提供的一个跨平台的多线程解决方式.因为其在iOS编程中,操作比較麻烦.一般不用,这里介绍只作为了解. 2.pthread的 ...

  4. 设置linux session 编码

    设置linux session 编码 export LANG=zh_CN.utf-8

  5. vs输出窗口,显示build的时间

    https://stackoverflow.com/questions/82128/displaying-build-times-in-visual-studio Tools... Options.. ...

  6. PHP join() 函数

    PHP join() 函数 实例 把数组元素组合为一个字符串: <?php $arr = array('Hello','World!','I','love','Shanghai!'); echo ...

  7. 7.配置文件mocha.opts

    转自:http://www.ruanyifeng.com/blog/2015/12/a-mocha-tutorial-of-examples.html Mocha允许在test目录下面,放置配置文件m ...

  8. POJ1284 Primitive Roots (原根)

    题目链接:http://poj.org/problem?id=1284 题目描述: 题目大意: 一个质数原根的个数 题解: 结论题 一个数n的原根的个数等于$\varphi(\varphi(n))$ ...

  9. POJ 3670 DP LIS?

    权值为1~3 好了 此题是水题-- i表示到了第i个数,j表示结尾的数是j f[i][j]=min(f[i][j],f[i-1][k]+(a[i]!=j)) 1<=k<=j 最长上升的. ...

  10. 如何设定editplus为txt默认打开程序?

    如何设定editplus为txt默认打开程序? 如图操作即可: