﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-　　　　　　　　　　　　　礼物 ^_^ -文章分类-flex3</title><link>http://www.blogjava.net/libin2722/category/43606.html</link><description>虚其心，可解天下之问；专其心，可治天下之学；静其心，可悟天下之理；恒其心，可成天下之业。</description><language>zh-cn</language><lastBuildDate>Sat, 16 Jan 2010 06:27:50 GMT</lastBuildDate><pubDate>Sat, 16 Jan 2010 06:27:50 GMT</pubDate><ttl>60</ttl><item><title>Flex 开发入门</title><link>http://www.blogjava.net/libin2722/articles/309766.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Sat, 16 Jan 2010 03:51:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/309766.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/309766.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/309766.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/309766.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/309766.html</trackback:ping><description><![CDATA[
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr valign="top">
								<td width="100%">
										<h1>Flex 开发入门</h1>
										<img class="display-img" height="6" alt="" src="http://www.ibm.com/i/c.gif" width="1" />
								</td>
								<td class="no-print" width="192">
										<img height="18" alt="developerWorks" src="http://www.ibm.com/developerworks/i/dw.gif" width="192" />
								</td>
						</tr>
				</tbody>
		</table>
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr valign="top">
								<td width="10">
										<img height="1" alt="" src="http://www.ibm.com/i/c.gif" width="10" />
								</td>
								<td width="100%">
										<table class="no-print" cellspacing="0" cellpadding="0" width="160" align="right" border="0">
												<tbody>
														<tr>
																<td width="10">
																		<img height="1" alt="" src="http://www.ibm.com/i/c.gif" width="10" />
																</td>
																<td>
																		<table cellspacing="0" cellpadding="0" width="150" border="0">
																				<tbody>
																						<tr>
																								<td class="v14-header-1-small">文档选项</td>
																						</tr>
																				</tbody>
																		</table>
																		<table class="v14-gray-table-border" cellspacing="0" cellpadding="0" border="0">
																				<tbody>
																						<tr>
																								<td class="no-padding" width="150">
																										<table cellspacing="0" cellpadding="0" width="143" border="0">
																												<script language="JavaScript" type="text/javascript">
																														<!--
document.write('<tr valign="top"><td width="8"><img src="//www.ibm.com/i/c.gif" width="8" height="1" alt=""/></td><td width="16"><img alt="将打印机的版面设置成横向打印模式" height="16" src="//www.ibm.com/i/v14/icons/printer.gif" width="16" vspace="3" /></td><td width="122"><p><b><a class="smallplainlink" href="javascript:print()">打印本页</a></b></p></td></tr>');
//-->
																												</script>
																												<tbody>
																														<tr valign="top">
																																<td width="8">
																																		<img height="1" alt="" src="http://www.ibm.com/i/c.gif" width="8" />
																																</td>
																																<td width="16">
																																		<img height="16" alt="将打印机的版面设置成横向打印模式" src="http://www.ibm.com/i/v14/icons/printer.gif" width="16" vspace="3" />
																																</td>
																																<td width="122">
																																		<p>
																																				<b>
																																						<a class="smallplainlink" href="javascript:print()">打印本页</a>
																																				</b>
																																		</p>
																																</td>
																														</tr>
																														<noscript>
																														</noscript>
																														<form name="email" action="https://www.ibm.com/developerworks/secure/email-it.jsp">
																																<input type="hidden" value="本文介绍 Flex 开发的基础知识：包括如何搭建开发环境，如何调试，以及如何建立和部署简单的 Flex 项目。通过本文的学习，可以为您将来深入地学习 Flex 打下良好的基础。" name="body" />
																																<input type="hidden" value="Flex 开发入门" name="subject" />
																																<input type="hidden" value="cn" name="lang" />
																																<script language="JavaScript" type="text/javascript">
																																		<!--
document.write('<tr valign="top"><td width="8"><img src="//www.ibm.com/i/c.gif" width="8" height="1" alt=""/></td><td width="16"><img src="//www.ibm.com/i/v14/icons/em.gif" height="16" width="16" vspace="3" alt="将此页作为电子邮件发送" /></td><td width="122"><p><a class="smallplainlink" href="javascript:document.email.submit();"><b>将此页作为电子邮件发送</b></a></p></td></tr>');
//-->
																																</script>
																																<tr valign="top">
																																		<td width="8">
																																				<img height="1" alt="" src="http://www.ibm.com/i/c.gif" width="8" />
																																		</td>
																																		<td width="16">
																																				<img height="16" alt="将此页作为电子邮件发送" src="http://www.ibm.com/i/v14/icons/em.gif" width="16" vspace="3" />
																																		</td>
																																		<td width="122">
																																				<p>
																																						<a class="smallplainlink" href="javascript:document.email.submit();">
																																								<b>
																																										<font color="#5c81a7" size="2">将此页作为电子邮件发送</font>
																																								</b>
																																						</a>
																																				</p>
																																		</td>
																																</tr>
																																<noscript>
																																</noscript>
																														</form>
																												</tbody>
																										</table>
																								</td>
																						</tr>
																				</tbody>
																		</table>
																		<!--START RESERVED FOR FUTURE USE INCLUDE FILES-->
																		<!-- this content will be automatically generated across all content areas -->
																		<!--END RESERVED FOR FUTURE USE INCLUDE FILES-->
																		<br />
																</td>
														</tr>
												</tbody>
										</table>
										<p>级别： 初级</p>
										<p>
												<a href="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/#author">
														<font color="#5c81a7">刘 庆</font>
												</a>(<a href="mailto:qlcdl@cn.ibm.com?subject=Flex 开发入门"><font color="#5c81a7">qlcdl@cn.ibm.com</font></a>), 软件工程师, IBM 软件开发中心<br /></p>
										<p>2009 年 1 月 07 日</p>
										<blockquote>本文介绍 Flex 开发的基础知识：包括如何搭建开发环境，如何调试，以及如何建立和部署简单的 Flex 项目。通过本文的学习，可以为您将来深入地学习 Flex 打下良好的基础。</blockquote>
										<!--START RESERVED FOR FUTURE USE INCLUDE FILES-->
										<!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters -->
										<!--END RESERVED FOR FUTURE USE INCLUDE FILES-->
										<p>
												<a name="N1004B">
														<span class="atitle">开始之前</span>
												</a>
										</p>
										<p>Flex 作为富 Internet 应用（RIA）时代的新技术代表，自从 2007 年 Adobe 公司将其开源以来，Flex 就以前所未有的速度在成长。很多公司，包括 IBM 都纷纷加入了 Flex 开发的阵营当中。很多开发人员也按捺不住 Flex 的“诱惑”而准备从事 Flex 开发。本文主要讲述 Flex 开发的基础知识，主要是关于开发环境的搭建，以及介绍简单的 Flex 项目创建、编码、调试以及部署的过程和 Flex 编程的基本知识。通过本文的学习，您将会学习如何搭建 Flex 基本的开发环境以及开发、调试和部署方面的基础知识。为您以后深入系统的学习 Flex 打下良好的基础。</p>
										<p>要学习本文，您需要有一定的 Web 编程经验和 Eclipse FireFox 使用经验。</p>
										<p>
												<a name="N10056">
														<span class="smalltitle">
																<strong>
																		<font face="Arial">代码示例和安装要求</font>
																</strong>
														</span>
												</a>
										</p>
										<p>本文所有示例均在 Windows XP SP3 系统中测试完成。您需要一台能流畅运行 Windows XP 系统的机器，除此之外您还需要一些工具才能试用本文中的代码。所有这些工具都可以免费下载（参见 <a href="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/#resources"><font color="#5c81a7">参考资源</font></a>）：</p>
										<ul>
												<li>Java SDK 1.5 或更高版本 
</li>
												<li>Tomcat 6.0 或更高版本 
</li>
												<li>Eclipse 3.3 或更高版本 
</li>
												<li>Flex Builder 3.0 或更高版本 
</li>
												<li>FireFox2.0 或更高版本 </li>
										</ul>
										<br />
										<table cellspacing="0" cellpadding="0" width="100%" border="0">
												<tbody>
														<tr>
																<td>
																		<img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" />
																		<br />
																		<img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" />
																</td>
														</tr>
												</tbody>
										</table>
										<table class="no-print" cellspacing="0" cellpadding="0" align="right">
												<tbody>
														<tr align="right">
																<td>
																		<img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" />
																		<br />
																		<table cellspacing="0" cellpadding="0" border="0">
																				<tbody>
																						<tr>
																								<td valign="center">
																										<img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" />
																										<br />
																								</td>
																								<td valign="top" align="right">
																										<a class="fbox" href="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/#main">
																												<b>
																														<font color="#5c81a7">回页首</font>
																												</b>
																										</a>
																								</td>
																						</tr>
																				</tbody>
																		</table>
																</td>
														</tr>
												</tbody>
										</table>
										<br />
										<br />
										<p>
												<a name="N10075">
														<span class="atitle">安装配置开发环境</span>
												</a>
										</p>
										<p>接下来我们便迫不及待的开始吧！首先搭建我们的开发环境，为了减少因为环境不一致而引起的问题，建议读者使用与本文相同的软件版本：</p>
										<ul>
												<li>
														<a href="http://java.sun.com/javase/downloads/index.jsp">
																<font color="#5c81a7">下载</font>
														</a>并安装 JDK( 本文使用版本为 Sun JDK 6) ； 
</li>
												<li>
														<a href="http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/ganymede/SR1/eclipse-jee-ganymede-SR1-win32.zip">
																<font color="#5c81a7">下载</font>
														</a>并解压 Eclipse( 本文使用版本为 Eclipse Ganymede J2EE 版本，含 WTP 插件 ); 
</li>
												<li>
														<a href="https://www.adobe.com/cfusion/tdrc/index.cfm?product=flex_eclipse">
																<font color="#5c81a7">下载</font>
														</a>并安装 Flex Builder Eclipse 插件版 ( 本文使用的 Flex Builder 版本为 3.0.1); 
</li>
												<li>
														<a href="http://dev.xiaonei.com/apache-mirror/tomcat/tomcat-6/v6.0.18/bin/apache-tomcat-6.0.18.exe">
																<font color="#5c81a7">下载</font>
														</a>并安装 Tomcat( 本文使用版本为 Tomcat6.0.18); 
</li>
												<li>
														<a href="http://www.mozilla.com/en-US/firefox/all-older.html">
																<font color="#5c81a7">下载</font>
														</a>并安装 FireFox( 由于 Flex3.0 和一些插件的兼容性问题，本文使用 FireFox2.0.0.17) </li>
										</ul>
										<table cellspacing="0" cellpadding="0" width="40%" align="right" border="0">
												<tbody>
														<tr>
																<td width="10">
																		<img height="1" alt="" src="http://www.ibm.com/i/c.gif" width="10" />
																</td>
																<td>
																		<table cellspacing="0" cellpadding="5" width="100%" border="1">
																				<tbody>
																						<tr>
																								<td bgcolor="#eeeeee">
																										<a name="N100A5">
																												<b>小提示</b>
																										</a>
																										<br />
																										<p>Flex Builder 提供两个版本，一个是 All in one 的版本，另外一个是 Eclipse 的插件版，All in one 的版本内置了一个 Eclipse 的基本核心，插件不全。所以我们采用单独下载 Eclipse 和安装 Flex Builder 插件版的方式。另外在安装过程中不要安装 FlashPlayer 到 IE 或者 FireFox 上。我们在接下来的步骤中将单独安装 debug 版本的 Flash Player 。</p>
																								</td>
																						</tr>
																				</tbody>
																		</table>
																</td>
														</tr>
												</tbody>
										</table>
										<p>大家知道 Flex 代码编译后是一个 SWF 文件，运行在 Flash Player 中，要想看到 SWF 文件在运行时输出的一些调试信息是比较困难的。所以在安装好基本的软件之后，我们要安装一些便于我们调试 Flex 的 FireFox 插件：</p>
										<p>
												<a href="http://download.macromedia.com/pub/flashplayer/updaters/10/flashplayer_10_plugin_debug.exe">
														<font color="#5c81a7">下载</font>
												</a>并安装 debug 版本的 FireFox Flash Player 插件 ( 本文使用的版本为 Flash Player10)</p>
										<p>打开 FireFox，到 FireFox 的 <a href="https://addons.mozilla.org/zh-CN/firefox/"><font color="#5c81a7">扩展组件站点</font></a> 上搜索并安装 HttpFox，FlashTracer，Cache Status 三个插件，如图 1 所示。</p>
										<br />
										<a name="N100C1">
												<b>图 1：开发调试需要的 FireFox 插件</b>
										</a>
										<br />
										<img alt="图 1：开发调试需要的 FireFox 插件" src="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/image001.jpg" />
										<br />
										<table cellspacing="0" cellpadding="0" width="40%" align="right" border="0">
												<tbody>
														<tr>
																<td width="10">
																		<img height="1" alt="" src="http://www.ibm.com/i/c.gif" width="10" />
																</td>
																<td>
																		<table cellspacing="0" cellpadding="5" width="100%" border="1">
																				<tbody>
																						<tr>
																								<td bgcolor="#eeeeee">
																										<a name="N100CE">
																												<b>小提示</b>
																										</a>
																										<br />
																										<p>在 Debug 版本的 Flash player 和 FlashTracer 插件完成好之后，我们发现 FlashTracer 并不能正常的显示用 trace 语句输出的调试信息。为了使其能够工作，还需要先点击图 1 中的 FlashTracer 设置按钮来设置日志文件的输出路径。并且输出的日志文件路径对于 Windows XP 来说必须是 C:\Documents and Settings\Administrator\Application Data\Macromedia\Flash Player\Logs\flashlog.txt 。</p>
																								</td>
																						</tr>
																				</tbody>
																		</table>
																</td>
														</tr>
												</tbody>
										</table>
										<p>在安装了 Debug 版本的 Flash Player 之后，Flash Tracer 能显示您在程序中用 trace() 语句输出的调试信息，HttpFox 插件不仅能查看 HTTP 通信的过程和数据，还能看到哪些内容是从 Cache 里面读取的。另外，Cache Status 插件可以让我们方便的管理缓存。在 Flex 开发过程中，往往需要先清除掉缓存中的内容，才能看到新改动的效果。</p>
										<p>接下来我们打开 Flex Builder, 在菜单<b>Window&gt;Preferences&gt;Server&gt;Runtime Environment</b>中设置我们的 Tomcat6 以及在菜单<b>Window&gt;Preferences&gt;General&gt;Web Browser</b>中设置浏览器为外部浏览器 FireFox，如图 2 和图 3 所示：</p>
										<br />
										<a name="N100E5">
												<b>图 2：配置 Tomcat</b>
										</a>
										<br />
										<img alt="图 2：配置 Tomcat" src="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/image002.jpg" />
										<br />
										<br />
										<a name="N100F2">
												<b>图 3：设置默认浏览器</b>
										</a>
										<br />
										<img alt="图 3：设置默认浏览器" src="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/image003.jpg" />
										<br />
										<p>到此为止，我们的开发环境算是彻底搭建完毕，可以看出这个过程并不算是特别简单。别急，先苦后甜，小憩一下，让我们来享受一下 Flex 开发带来的乐趣吧！</p>
										<br />
										<table cellspacing="0" cellpadding="0" width="100%" border="0">
												<tbody>
														<tr>
																<td>
																		<img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" />
																		<br />
																		<img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" />
																</td>
														</tr>
												</tbody>
										</table>
										<table class="no-print" cellspacing="0" cellpadding="0" align="right">
												<tbody>
														<tr align="right">
																<td>
																		<img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" />
																		<br />
																		<table cellspacing="0" cellpadding="0" border="0">
																				<tbody>
																						<tr>
																								<td valign="center">
																										<img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" />
																										<br />
																								</td>
																								<td valign="top" align="right">
																										<a class="fbox" href="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/#main">
																												<b>
																														<font color="#5c81a7">回页首</font>
																												</b>
																										</a>
																								</td>
																						</tr>
																				</tbody>
																		</table>
																</td>
														</tr>
												</tbody>
										</table>
										<br />
										<br />
										<p>
												<a name="N10100">
														<span class="atitle">Flex 的 Hello World ！</span>
												</a>
										</p>
										<p>
												<a name="N10105">
														<span class="smalltitle">
																<strong>
																		<font face="Arial">创建项目</font>
																</strong>
														</span>
												</a>
										</p>
										<p>打开 Flex Builder, 如图 4 所示，新建一个 Flex 项目：</p>
										<br />
										<a name="N10110">
												<b>图 4：新建 Flex 项目</b>
										</a>
										<br />
										<img alt="图 4：新建 Flex 项目" src="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/image004.jpg" />
										<br />
										<p>在图 5 所示设置页面中，我们选择项目类型是 Web application，关于 AIR 类型应用的基础知识可参考 developerWorks 上的另一篇文章<a href="http://www.ibm.com/developerworks/cn/edu/wa-dw-wa-air-mashup.html"><font color="#5c81a7">《使用 Adobe AIR 和 Dojo 开发基于 Ajax 的 Mashup 应用》</font></a>。 Application server type 我们以 J2EE 为例，并且不要钩选 Use remote object access service, 关于这些高级内容，我们将在后续的文章中陆续讨论。最后我们使用 Eclipse Ganymede J2EE 版本内置的 WTP(Web Tools Platform) 来创建一个后端使用 Java 前端使用 Flex 的 RIA 项目。在默认设置下，src 是 Java 代码的源代码文件夹。</p>
										<br />
										<a name="N10124">
												<b>图 5：设置 Flex 项目</b>
										</a>
										<br />
										<img alt="图 5：设置 Flex 项目" src="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/image005.jpg" />
										<br />
										<p>在后续的设置页面中，我们配置项目运行时的 J2EE server 为我们在安装配置开发环境部分中配置的 Tomcat6 如图 6 所示：</p>
										<br />
										<a name="N10134">
												<b>图 6：配置运行时 J2EE Server</b>
										</a>
										<br />
										<img alt="图 6：配置运行时 J2EE Server" src="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/image006.jpg" />
										<br />
										<p>点击 Next，在下一个页面中一切都按照默认设置即可。如图 7 所示，Main source folder 是设置默认的 flex 代码 ( 包括 mxml 和 Action script) 的源文件夹，Main application file 是项目默认的主应用。 Out folder URL 是项目运行在我们配置的 Tomcat 上时的 URL.</p>
										<br />
										<a name="N10144">
												<b>图 7：其他属性设置</b>
										</a>
										<br />
										<img alt="图 7：其他属性设置" src="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/image007.jpg" />
										<br />
										<p>一切完成之后，我们来看看项目的组成结构，如图 8 所示：flex_src 中是默认的 flex 源码位置，flex_libs 则是存放 flex 其他第三方包的默认路径。类似于 web 应用的 lib 文件夹。 src 是 java 代码位置。 WebContent 文件夹的结构和普通由 WTP 建立的 Web Project 的结构完全相同。在默认的输出路径 bin-debug 文件夹中，我们可以看出 Flex builder 自动生成的 FlexSample.mxml 文件已经被自动编译成 FlexSample.swf 文件。</p>
										<br />
										<a name="N10154">
												<b>图 8：Flex 项目结构</b>
										</a>
										<br />
										<img alt="图 8：Flex 项目结构" src="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/image008.jpg" />
										<br />
										<p>接下来，我们在新创建的项目上增加一点内容并让它运行起来：双击 FlexSample.mxml, 在其中添加一个最基本的 Flex 组件 :Label, 并且在该应用初始化的时候调用 init() 方法。我们在 init() 方法中用 trace() 语句输出调试信息。代码如下清单 1 所示：</p>
										<br />
										<a name="N10165">
												<b>清单 1：FlexSample.mxml</b>
										</a>
										<br />
										<table cellspacing="0" cellpadding="0" width="100%" border="0">
												<tbody>
														<tr>
																<td class="code-outline">
																		<pre class="displaycode">				
&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;mx:Application 
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    layout="absolute"
     initialize="init()"&gt;
     &lt;mx:Script&gt;
         &lt;![CDATA[
             private function init():void
             {
                 var i:int = 0;
                 i++;
                 trace("i="+i);
             }
         ]]&gt;
     &lt;/mx:Script&gt;
    &lt;mx:Label text="Hello World!" /&gt;
&lt;/mx:Application&gt;
				</pre>
																</td>
														</tr>
												</tbody>
										</table>
										<br />
										<p>
												<a name="N1016C">
														<span class="smalltitle">
																<strong>
																		<font face="Arial">运行、调试以及部署</font>
																</strong>
														</span>
												</a>
										</p>
										<p>现在，终于到了让我们的项目运行的时候了 ! 右键点击项目 -&gt;Run As-&gt;Run On Server 如图 9 所示：接下来的几个页面选择默认即可，这时大家我们可以看到项目会被部署到我们配置的 Tomcat6 上去。并且 Flex Builder 会自动打开一个我们刚才配置的外部 FireFox 窗口。</p>
										<br />
										<a name="N10177">
												<b>图 9：运行项目</b>
										</a>
										<br />
										<img alt="图 9：运行项目" src="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/image009.jpg" />
										<br />
										<p>但可能令您遗憾的是 Flex Builder 自动打开的 FireFox 窗口打开的 URL: http://localhost:8080/FlexSample/ 却什么也没有。别着急，还剩下最后一步：</p>
										<p>如图 10 所示：右键点击我们要运行的 FlexSample.mxml &gt; Run As &gt; Flex Application</p>
										<br />
										<a name="N1018A">
												<b>图 10：运行 mxml</b>
										</a>
										<br />
										<img alt="图 10：运行 mxml" src="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/image010.jpg" />
										<br />
										<p>如果不出意外的话，您应该会看到下面的界面，Flash Tracer 插件输出了我们用 trace() 语句输出的 debug 信息，标签的 Hello World ！也被显示到了界面上。同样，打开 FireFox 的 HttpFox 插件，我们也可以看到在运行时 FlexSample.swf 被载入。</p>
										<br />
										<a name="N1019A">
												<b>图 11：运行后的界面</b>
										</a>
										<br />
										<img alt="图 11：运行后的界面" src="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/image011.jpg" />
										<br />
										<p>如果我们希望像调试 Java 代码那样，在运行时观察变量的值怎么办呢？首先我们像在 Java 代码中设置断点一样给我们的 Action Script 代码增加断点。如图 12 所示：</p>
										<br />
										<a name="N101AA">
												<b>图 12：在 Action Script 代码中设置断点</b>
										</a>
										<br />
										<img alt="图 12：在 Action Script 代码中设置断点" src="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/image012.jpg" />
										<br />
										<p>然后选择我们的 FlexSample.mxml 右键选择调试运行。如图 13 所示：</p>
										<br />
										<a name="N101BA">
												<b>图 13：调试方式运行 flex</b>
										</a>
										<br />
										<img alt="图 13：调试方式运行 flex" src="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/image013.jpg" />
										<br />
										<p>然后我们随提示切换到 Flex 的调试视图，就会看到我们可以像 Java 调试模式那样轻松的调试 Flex 代码。如图 14 所示：</p>
										<br />
										<a name="N101CA">
												<b>图 14：Flex Builder 调试视图</b>
										</a>
										<br />
										<img alt="图 14：Flex Builder 调试视图" src="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/image014.jpg" />
										<br />
										<p>利用 WTP，我们可以将项目 export 成一个标准的 war file. 将导出的 war 文件放到 Tomcat 的 webapps 目录或者其他 web 服务器的相应目录下就可以当作一个标准的 web 应用来部署运行。</p>
										<p>到此为止，我们应该庆祝一下我们已经迈入了 Flex 的大门了！我们已经编译出了我们自己的 swf 文件，并且运行在服务器上了。熟悉了这个开发过程之后，让我们乘胜前进，结合一个小例子学习一下 Flex 的编程基础知识吧！</p>
										<br />
										<table cellspacing="0" cellpadding="0" width="100%" border="0">
												<tbody>
														<tr>
																<td>
																		<img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" />
																		<br />
																		<img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" />
																</td>
														</tr>
												</tbody>
										</table>
										<table class="no-print" cellspacing="0" cellpadding="0" align="right">
												<tbody>
														<tr align="right">
																<td>
																		<img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" />
																		<br />
																		<table cellspacing="0" cellpadding="0" border="0">
																				<tbody>
																						<tr>
																								<td valign="center">
																										<img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" />
																										<br />
																								</td>
																								<td valign="top" align="right">
																										<a class="fbox" href="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/#main">
																												<b>
																														<font color="#5c81a7">回页首</font>
																												</b>
																										</a>
																								</td>
																						</tr>
																				</tbody>
																		</table>
																</td>
														</tr>
												</tbody>
										</table>
										<br />
										<br />
										<p>
												<a name="N101DB">
														<span class="atitle">Flex 编程基础</span>
												</a>
										</p>
										<p>
												<a name="N101E0">
														<span class="smalltitle">
																<strong>
																		<font face="Arial">面向对象的编程</font>
																</strong>
														</span>
												</a>
										</p>
										<p>在上面 Hello World 的例子中我们可以看出，就像在 HTML 中嵌入 JavaScript 那样，我们可以在 mxml 里面嵌入 Action Script 代码来实现业务逻辑。没错！如果您把 Flex 中 mxml 和 Action Script 的关系理解为 Html 和 JavaScript 的关系，您会忽然发现您对 Flex 变的如此熟悉！</p>
										<p>Action Script 语言是面向对象的脚本语言，它连编写方式都和 JavaScript 非常的相似。除了可以嵌套在 mxml 里面之外，它还可以像 JavaScript 写在单独的 .js 文件里面那样写在单独的 .as 文件里面，然后在 mxml 里面引入它。</p>
										<p>下面我们新建一个 Action Script 的类 J2eeServer.as 如清单 2 所示：</p>
										<br />
										<a name="N101F2">
												<b>清单 2：J2eeServer.as</b>
										</a>
										<br />
										<table cellspacing="0" cellpadding="0" width="100%" border="0">
												<tbody>
														<tr>
																<td class="code-outline">
																		<pre class="displaycode">				
package com.ibm.flex
{
    import flash.events.EventDispatcher;
    import mx.rpc.AsyncToken;
    import mx.rpc.events.FaultEvent;
    import mx.rpc.events.ResultEvent;
    import mx.rpc.http.HTTPService;
    
    public class J2eeServer extends EventDispatcher
    {
        public function J2eeServer()
        {
        }

        public function sendRequest(locale:String):void
        {
            var httpObject:HTTPService = new HTTPService();
            httpObject.resultFormat = "text";
            httpObject.url = 
                "http://localhost:8080/FlexSample/SampleServlet?locale="+locale;
            var responder:mx.rpc.Responder = new mx.rpc.Responder(onSuccess, onFault);
            var call:AsyncToken = httpObject.send();
            call.addResponder(responder);
        }
        private function onSuccess(event:ResultEvent):void
        {
            this.dispatchEvent(event);   
        }
        
		private function onFault(event:FaultEvent):void
        {
            trace("communication failed!");
            this.dispatchEvent(event); 
        } 
    }
}
</pre>
																</td>
														</tr>
												</tbody>
										</table>
										<br />
										<p>在这个类定义里面，熟悉 Java 的开发人员可以看出其编码规范和 Java 非常类似。在其中我们定义了一个 sendRequest() 方法， 使用 HTTPService 对象发起一个 http 的 get 请求 , 并且对于不同的返回结果我们定义了 onSuccess() 和 onFault() 两个方法去处理。在这两个结果处理方法中，我们将事件 dispatch 出去。</p>
										<p>
												<a name="N101FC">
														<span class="smalltitle">
																<strong>
																		<font face="Arial">与 Servlet 集成</font>
																</strong>
														</span>
												</a>
										</p>
										<p>在 J2eeServer.as 中，我们通过 Action Script 发出 http 请求，现在我们定义一个服务器端的 servlet 来处理该请求。如清单 3 所示：</p>
										<br />
										<a name="N10208">
												<b>清单 3：SampleServlet.java</b>
										</a>
										<br />
										<table cellspacing="0" cellpadding="0" width="100%" border="0">
												<tbody>
														<tr>
																<td class="code-outline">
																		<pre class="displaycode">				
package com.ibm.sample;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class SampleServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public SampleServlet() {
        super();
    }

    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        String locale = request.getParameter("locale");
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("The locale you selected is " + locale);
    }
}
</pre>
																</td>
														</tr>
												</tbody>
										</table>
										<br />
										<p>和普通 web 应用一样配置 web.xml, 如清单 4</p>
										<br />
										<a name="N10215">
												<b>清单 4：web.xml</b>
										</a>
										<br />
										<table cellspacing="0" cellpadding="0" width="100%" border="0">
												<tbody>
														<tr>
																<td class="code-outline">
																		<pre class="displaycode">				
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"&gt;
    &lt;display-name&gt;FlexSample&lt;/display-name&gt;
    &lt;servlet&gt;
        &lt;display-name&gt;SampleServlet&lt;/display-name&gt;
        &lt;servlet-name&gt;SampleServlet&lt;/servlet-name&gt;
        &lt;servlet-class&gt;com.ibm.sample.SampleServlet&lt;/servlet-class&gt;
    &lt;/servlet&gt;
    &lt;servlet-mapping&gt;
        &lt;servlet-name&gt;SampleServlet&lt;/servlet-name&gt;
        &lt;url-pattern&gt;/SampleServlet&lt;/url-pattern&gt;
    &lt;/servlet-mapping&gt;
    &lt;welcome-file-list&gt;
        &lt;welcome-file&gt;FlexSample.html&lt;/welcome-file&gt;
    &lt;/welcome-file-list&gt;
&lt;/web-app&gt;				
				</pre>
																</td>
														</tr>
												</tbody>
										</table>
										<br />
										<p>
												<a name="N1021C">
														<span class="smalltitle">
																<strong>
																		<font face="Arial">事件驱动与数据绑定</font>
																</strong>
														</span>
												</a>
										</p>
										<p>从 J2eeServer.as 中我们依稀可以看出 Flex 事件驱动的影子。的确，Flex 的业务流程大多是靠事件来驱动的。某一个方法结束后，dispatch 出去一个事件。事件的监听者监听到这个事件后就会采取相应的动作来处理事件。如清单 5 所示：我们在 init() 方法中进行了事件绑定，绑定了两个监听方法 successHandler () 和 errorHandler () 到 J2eeServer 上。当 J2eeServer 完成和服务器端 servlet 通信 dispatch 出相应的事件后，两个监听方法便会监听到相应的事件并进行处理。</p>
										<p>Flex 的另外一个重要的特点就是支持数据绑定，在另一篇文章<a href="http://www.ibm.com/developerworks/cn/edu/j-dw-java-jfx-mashup.html"><font color="#5c81a7">《使用 Eclipse 和 JavaFX 开发 Mashup 应用》</font></a>中我们曾介绍了 JavaFx 的数据绑定特性，同样 Flex 也支持数据绑定。当数据源被绑定到另外一个对象的某属性上时，数据源的数据如果发生变化，开发人员不需要写额外的代码该对象的属性值就可以相应的变化。如清单 5 中所示：如果要进行数据绑定，则要先定义一个可绑定的数据源，例如我们在变量<code><span class="boldcode"><strong><font face="Lucida Console" size="2">private</font></strong></span></code><code></code><code><span class="boldcode"><strong><font face="Lucida Console" size="2">var</font></strong></span></code><code>serverResponse:String =</code><code><span class="boldcode"><strong><font face="Lucida Console" size="2">""</font></strong></span></code><code>;</code>的上面设置 [Bindable] 属性，表示其为可绑定变量。然后我们在 resultLable 中使用花括号 {<code>serverResponse</code>} 将变量<code>serverResponse</code>绑定到 resultLable 的 text 属性上。</p>
										<br />
										<a name="N10258">
												<b>清单 5：FlexSample.mxml</b>
										</a>
										<br />
										<table cellspacing="0" cellpadding="0" width="100%" border="0">
												<tbody>
														<tr>
																<td class="code-outline">
																		<pre class="displaycode">				
&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
     creationComplete="init()"&gt;
     &lt;mx:Script&gt;
         &lt;![CDATA[
             import mx.rpc.events.ResultEvent;
             import mx.rpc.events.FaultEvent;
             import com.ibm.flex.J2eeServer;
             import mx.collections.ArrayCollection;
             
            private var jserver:J2eeServer = new J2eeServer();
            //可绑定变量
            [Bindable]
            private var serverResponse:String = "";
            //可绑定变量
            [Bindable]
            private var locales:ArrayCollection = new ArrayCollection(
                                                      [ {label:"en_us", data:"en_us"}, 
                                                         {label:"zh_cn", data:"zh_cn"}]); 
             
             private function init():void
             {
                 //事件绑定
                jserver.addEventListener(ResultEvent.RESULT, successHandler);
                jserver.addEventListener(FaultEvent.FAULT, errorHandler);
             }
             private function localeComboxChangeHandler(event:Event):void
             {
                 jserver.sendRequest(localeCombox.selectedItem.data);
             }
             
             private function successHandler(event:ResultEvent):void
             {
                 serverResponse = event.result.toString();
                 trace(event.result);
             }
             private function errorHandler(event:FaultEvent):void
             {
                 serverResponse = event.message.toString();
                 trace(event.message);
             }
         ]]&gt;
     &lt;/mx:Script&gt;
     &lt;mx:VBox&gt;
        &lt;mx:Label text="Select your locale:" /&gt;
        &lt;mx:ComboBox 
		    id="localeCombox" 
		    width="160" 
		    dataProvider="{locales}" 
		    change="localeComboxChangeHandler(event)"/&gt;
        &lt;mx:Label 
		    id="resultLabel"
		    text="The response from server is: {serverResponse}" /&gt;        
     &lt;/mx:VBox&gt;
&lt;/mx:Application&gt;
</pre>
																</td>
														</tr>
												</tbody>
										</table>
										<br />
										<p>最终项目的文件结构如图 15 所示：</p>
										<br />
										<a name="N10264">
												<b>图 15：项目文件结构图</b>
										</a>
										<br />
										<img alt="图 15：项目文件结构图" src="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/image015.jpg" />
										<br />
										<p>运行项目，我们可以看到当我们改变下拉框的值的时候，会触发 localeComboxChangeHandler() 函数调用 J2eeServer 的 sendRequest() 方法将选择的 locale 值发送给服务器端的 servlet，并且在结果返回后，将从服务器端得到的 response 显示在 resultLable 上。如图 16 所示：</p>
										<br />
										<a name="N10274">
												<b>图 16：项目运行结果</b>
										</a>
										<br />
										<img alt="图 16：项目运行结果" src="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/image016.jpg" />
										<br />
										<br />
										<table cellspacing="0" cellpadding="0" width="100%" border="0">
												<tbody>
														<tr>
																<td>
																		<img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" />
																		<br />
																		<img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" />
																</td>
														</tr>
												</tbody>
										</table>
										<table class="no-print" cellspacing="0" cellpadding="0" align="right">
												<tbody>
														<tr align="right">
																<td>
																		<img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" />
																		<br />
																		<table cellspacing="0" cellpadding="0" border="0">
																				<tbody>
																						<tr>
																								<td valign="center">
																										<img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" />
																										<br />
																								</td>
																								<td valign="top" align="right">
																										<a class="fbox" href="http://www.ibm.com/developerworks/cn/web/wa-lo-flexdev/#main">
																												<b>
																														<font color="#5c81a7">回页首</font>
																												</b>
																										</a>
																								</td>
																						</tr>
																				</tbody>
																		</table>
																</td>
														</tr>
												</tbody>
										</table>
										<br />
										<br />
										<p>
												<a name="N1027F">
														<span class="atitle">结束语</span>
												</a>
										</p>
										<p>Flex 作为 RIA 的新技术，对传统 web 开发技术有继承也有发展。这篇文作为入门文，主要作用是帮助大家掌握 Flex 的开发环境、开发方式、开发调试部署的流程以及 Flex 的基本编程知识。但 Flex 除了国际化、Unit 测试、Ant 编译等传统问题之外，作为新技术 Flex 还有很多不同以往的地方，比如模块开发，RSL(Runtime Shared Libraries), Shared object、和 JavaScript 交互以及它的 MVC 框架 cairngorm，远程调用和消息传递框架 BlazeDS 等。所有这些问题都是值得我们进行后续讨论的。</p>
										<p>
												<a name="N10287">
														<span class="smalltitle">
																<strong>
																		<font face="Arial">致谢</font>
																</strong>
														</span>
												</a>
										</p>
										<p>在本文完成之际，特别感谢 IBM 中国软件开发中心 IM 开发团队我的同事们在工作和学习中给我的巨大帮助！</p>
										<br />
										<br />
										<p>
												<a name="resources">
														<span class="atitle">参考资料 </span>
												</a>
										</p>
										<b>学习</b>
										<br />
										<ul>
												<li>“<a href="http://livedocs.adobe.com/flex/3/html/help.html?content=Part2_DevApps_1.html"><font color="#5c81a7">Flex 3 Developer's Guide</font></a>”：很好的 Flex 基础知识入门材料。 <br /><br /></li>
												<li>“<a href="http://www.adobe.com/devnet/flex/?tab:samples=1"><font color="#5c81a7">Flex Developer Center</font></a>”：针对具体开发场景的大量示例代码和文章。 <br /><br /></li>
												<li>“<a href="http://livedocs.adobe.com/flex/3/html/help.html?content=anttasks_1.html"><font color="#5c81a7">Flex Ant Tasks</font></a>”：介绍了如何结合 Ant 工具来编译 Flex。 <br /><br /></li>
												<li>“<a href="http://labs.adobe.com/wiki/index.php/Flex_3:Feature_Introductions:Flex_3_RSLs"><font color="#5c81a7">Flex RSL</font></a>”：对Flex RSL开发的各方面进行详细介绍的官方文档。 <br /><br /></li>
												<li>“<a href="http://www.ibm.com/developerworks/cn/web/wa-aj-flex/"><font color="#5c81a7">集成 Flex 与 Ajax 应用程序</font></a>”（developerWorks，2008 年 7 月）：阅读完本文后，您将能够利用通过 Flash 资源获得的丰富功能。<br /><br /></li>
												<li>“<a href="http://www.ibm.com/developerworks/cn/edu/wa-dw-wa-facebookflex.html"><font color="#5c81a7">使用 Flex SDK 实现一个 Facebook 相册</font></a>”（developerWorks，2008 年 12 月）：在本篇教程中，将在 Adobe Flex 中开发一个 Facebook 应用程序，它可以以幻灯片的形式显示用户的 Facebook 相册。<br /><br /></li>
												<li>“<a href="http://code.google.com/p/fluint/"><font color="#5c81a7">Fluint 的官方站点</font></a>”：Fluint 是 Flex Unit Test 的框架 Flex Unit 的升级版本。 <br /><br /></li>
												<li>“<a href="http://opensource.adobe.com/wiki/display/cairngorm/Cairngorm"><font color="#5c81a7">Cairngorm 框架的 Adobe 官方站点</font></a>”：Cairngorm 是 Flex 开发最著名和最成熟的一个 MVC 框架。 <br /><br /></li>
												<li>“<a href="http://opensource.adobe.com/wiki/display/blazeds/BlazeDS"><font color="#5c81a7">BlazeDS 框架的开源站点</font></a>”：BlazeDS 是 Adobe 的一个开源项目。基于服务器的 Java 远程调用（remoting）和 Web 消息传递（messaging）技术，它能够使得后台的 Java 应用程序和运行在浏览器上的 Flex 应用程序或 AIR 应用程序相互通信。 <br /><br /></li>
										</ul>
										<br />
										<b>获得产品和技术</b>
										<br />
										<ul>
												<li>
														<a href="http://java.sun.com/javase/downloads/index.jsp">
																<font color="#5c81a7">下载</font>
														</a>JRE 或 JDK。 <br /><br /></li>
												<li>
														<a href="http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/ganymede/SR1/eclipse-jee-ganymede-SR1-win32.zip">
																<font color="#5c81a7">下载</font>
														</a>Eclipss Ganymede。 <br /><br /></li>
												<li>
														<a href="https://www.adobe.com/cfusion/tdrc/index.cfm?product=flex_eclipse">
																<font color="#5c81a7">下载</font>
														</a>Flex Builder Eclipse 插件版。 <br /><br /></li>
												<li>
														<a href="http://dev.xiaonei.com/apache-mirror/tomcat/tomcat-6/v6.0.18/bin/apache-tomcat-6.0.18.exe">
																<font color="#5c81a7">下载</font>
														</a>Tomcat 6。 <br /><br /></li>
												<li>
														<a href="http://www.mozilla.com/en-US/firefox/all-older.html">
																<font color="#5c81a7">下载</font>
														</a>FireFox 2.0。 <br /><br /></li>
												<li>
														<a href="http://download.macromedia.com/pub/flashplayer/updaters/10/flashplayer_10_plugin_debug.exe">
																<font color="#5c81a7">下载</font>
														</a>BDebug 版本的 FireFox Flash Player 插件。 </li>
										</ul>
										<br />
										<br />
										<p>
												<a name="author">
														<span class="atitle">关于作者</span>
												</a>
										</p>
										<table cellspacing="0" cellpadding="0" width="100%" border="0">
												<tbody>
														<tr>
																<td colspan="3">
																		<img height="5" alt="" src="http://www.ibm.com/i/c.gif" width="100%" />
																</td>
														</tr>
														<tr valign="top" align="left">
																<td>
																		<p>
																		</p>
																</td>
																<td>
																		<img height="5" alt="" src="http://www.ibm.com/i/c.gif" width="4" />
																</td>
																<td width="100%">
																		<p>刘庆，目前在 IBM 软件开发中心（IBM CSDL）IM 开发团队担任开发工程师，拥有 IBM DB2 DBA 专业认证，他在 J2EE 和 Web 开发领域有着多年开发经验，喜欢关注新技术。他毕业于中国科技大学，并拥有硕士学位。</p>
																</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/libin2722/aggbug/309766.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2010-01-16 11:51 <a href="http://www.blogjava.net/libin2722/articles/309766.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>