??xml version="1.0" encoding="utf-8" standalone="yes"?> Flex是高效、免贏V开源的框架Q广泛用于生成移动?/span>web和桌面^台的应用E序。,它可以开发h员创建利?/span> Adobe® Flash® Player 9 作ؓ前台?#8220;富客L互联|应用程?/span>/rich Internet applications/RIA”Q以满用户更ؓ直观和极具交互性的在线体验。简单的_Flex是用来~写flashE序的框Ӟ非常适合软g开发h员用?/span>
开?/span>Flex 应用E序的典型步骤如下(通常是这PQ?/span> 1. 选取一pd预先定制好的、用于设计应用程序界面的lgQ如表格、按钮等{) 2. 布置lg以设计用L面?/span> 3. 使用样式和主题来增强视觉斚w的设计?/span> 4. d动态行为(例如E序部g之间的相互作用)?/span> 5. 定义q连接所需的数据库服务?/span> 6. 源代码~译?/span>SWF 文gQ然后在Flash Player 中运行?/span>
1. Flex framework Adobe® Flex 2 framework 包含了创?/span>RIA 所需要的所有组Ӟ它们是:用于应用E序布局规划的容器;针对用户界面和从用户处获取数据的控制Q例如文本框和按钮)Q广泛支持的数据l定、数据格式化、以及有效值验证;事g驱动的开发模式?/span>Flex framework 被包含在公用lg库(SWCQ文件中?/span> 2. MXML 每个Flex 应用E序臛_包含有一?/span>MXML 文gQ它被作E序的主文g?/span>MXML是一U标记语aQ它是基?/span>XML 的一U实玎ͼ用来创徏Flex 应用E序。你可以使用它去声明E序中所使用的标{构的定义?/span> 3. ActionScript 3.0 你可以?/span>ActionScript 3.0 为应用程序添加动态行为,它是ZECMAScript 的一U实玎ͼcM?/span>JavaScript。你可以?/span>ActionScript 作ؓ一个脚本块Q在MXML 文g中直接进行添加;或者创Z个单独的ActionScript 文gQ然后将它们导入?/span>MXML 文g中?/span> 4. CSS 你可以通过讄lg的属性(propertiesQ来改变lgQ按钮、列表框{)的视觉样式。例如,按钮lg有一?/span>fontFamily 属性,你可以用它来进行字体的讄。样式的属性通常有四U方法来q行控制Q通过主题(theme)Q在CSS 文g中进行定义;?/span>MXML 文g中的样式块中q行定义Q在lg的实例中q行讄?/span>MXML 样式的定义和使用遵@?/span>W3C Cascading Style SheetsQ?/span>CSSQ标?/span>?/span> 5. 囑Ş资源 与很多应用程序一PFlex 包含了各U各L囑Ş资源Q如图标和图象?/span> 6. 数据 一些组件被使用来进行数据显C(combo box 或?/span>data gridQ的工作。同Ӟ你还可以使用各种方式来将q些lg与数据联pv来,如用数l、收集对象、数据模型、以及外?/span>XML 数据资源Q等{?/span> 下图是一?/span>MXML的简单例子,点击定按钮后会弹出一个提C框Q?br />
ActionScript实现了面向对象编E(OOPQ的支持Q一?/span>MXML是一个对象,MXML中的一个标{(比如button?/span>textInputQ也是一个对象,对于学习q?/span>JAVA?/span>C#{面向对象语a的程序员上手非常快?/span> AS的关键字?/span>JAVA怼Q但是方法、变量的定义有所不同Q?/span>AS的定义方式ؓQ【对象名:对象cR【方法名():q回cd】的格式Q下面是一个简单的ASc: 上面是一个独立的ASc,一个独立的cL件命名ؓQ类?/span>.as?/span> ?/span>MXML?/span><script>脚本中可以通过new Demo()的Ş式实例化该对象?/span>
creationComplete事gQ该事g?/span>html?/span>body标签?/span>onload事gcMQ在当前应用E序启动完成后触发?/span> trace(String)ҎQ在调试模式Q向控制台打印消息,cM?/span>JAVA?/span>System.out.print()?/span> 新徏一?/span>mxml文gQ在文g中写下如下代码,使用调试模式启动当前文gQ启动应用程序后Q在控制台能够看?#8220;启动demo.mxml文g”的提C?/span>
?/span>AS3中最常用的数据类型有以下几种Q?/span> 基础数据cdQ?/span>Boolean?/span>String?/span>int?/span>uint?/span>Number{?/span> 复杂数据cdQ?/span>Object?/span>Array ?/span>ArrayCollection BooleanQ布|分ؓtrue/false两种 StringQ字W串Q这个不多说?/span> intQ带W号?/span>32位整敎ͼ数D_-2147483648~2147483647 uintQ不带符L32位整敎ͼ数D_0~4294967265 NumberQ?/span>64位QҎ ObjectQ?/span>AS所有类的基c,{同?/span>JAVA?/span>Objectc?/span> ArrayQ非cd化数据,同一个数l对象允许装不同cd的数?/span>
ArrayCollectionQ集合对象,?/span>JAVA?/span>ArrayListcMQ常用来动态封装数?/span>
不同数据cd的默认值有所不同看如下代码: q行l果如下Q?/span> Boolean默认|false String默认|null int默认|0 Number默认|NaN a默认|undefined Object默认|null
【注意?/span> 点数比整数消耗的g资源要多Q所以尽量?/span>int?/span>uint来表C整数?/span> Number?/span>JAVA中的double同样存在_ֺ问题Q数值相差过大的点数相加的l果可能有偏差?/span> AS3Ҏ传递,寚w基础数据cd是传引用Q即对象在方法内的D改变Q外面的g会改变)Q对基础数据cd是传|卛_象在Ҏ内的值改变,外面的g不受影响Q?/span>
q算W:AS3的运符?/span>JAVA?/span>C#{非常相|?/span>(+)?/span>(-)?/span>(*)?/span>(/)、赋?/span>(=)、自?/span>(++)自减(--)、关p运符(>,<,>=,<=)、逻辑q算W?/span>(&&,||,!){等?/span> 关键?/span>is用语判断当前对象属于什么类型:
表达式:AS也拥有丰富的表达式,如常用的if?/span>while?/span>switch?/span>for循环Q实例代码如下:
?/p>
for…in?/span>for each…in用于枚D一个集合的数据Q?/span>for…in枚D出的是集合的下标位置Q?/span>for each…in枚D出集合的倹{?/span>for each…incM?/span>JAVA?/span>for(xx in oo)?/span>C#?/span>foreach(xx in oo)?/span> 注意?/span> Flex标签元素?/span>html元素怼Q都有自q事g触发机制Qƈ且创建方式也怼Q通常Flex标签创徏事g有两U方式:一U是在标{中定义事g触发属性,另一U是?/span>ActionScript中调用事件触发方法,下面看代码:
Java-Flex对象对应?
]]>
]]>
一个典型的Flex 应用E序包括如下元素Q?/span>
以上仅仅?/span>Flex的基知识Q要想用?/span>Flex?/span>ActionscriptQ则必须学好面向对象~程思想Q这样写出来的代码才会优雅、效率、可dl护?br />转蝲自:http://blessht.iteye.com/blog/1130171
]]>
基元数据cd包括 1. Boolean?nbsp;
2. int、Null?nbsp;
3. Number?nbsp;
4. String?nbsp;
5. uint
6. void
ActionScript核心c还定义下列复杂数据cdQ?
1. Object?nbsp;
2. Array?nbsp;
3. Date?nbsp;
4. Error?nbsp;
5. Function?nbsp;
6. RegExp?nbsp;
7. XML XMLList?nbsp;
Boolean 数据cd
Boolean 数据cd包含两个|true ?false 。对?Boolean cd的变量,其它M值都是无效的。已l声明但
未初始化的布尔变量的默认值是 false ?
int 数据cd
int 数据cd在内部存储ؓ 32 位整敎ͼ它包含一l介?-2,147,483,648 (-231 ) ?2,147,483,647 (231 - 1)
之间的整敎ͼ包括 -2,147,483,648 ?2,147,483,647Q。早期的 ActionScript 版本仅提?Number 数据cdQ该
数据cd既可用于整数又可用于点数。在 ActionScript 3.0 中,现在可以讉K 32 位带W号整数和无W号整数?/p>
低位机器cd。如果您的变量将不会使用点敎ͼ那么Q?int 数据cd来代?Number 数据cd应会更快更高
效?
对于于 int 的最值或大于 int 的最大值的整数|应?Number 数据cd。Number 数据cd可以处理 -
9,007,199,254,740,992 ?9,007,199,254,740,992Q?3 位整数|之间的倹{int 数据cd的变量的默认值是 0
?
Null 数据cd
Null 数据cd仅包含一个|null 。这?String 数据cd和用来定义复杂数据类型的所有类Q包?Object c)
的默认倹{其它基元数据类型(?Boolean、Number、int ?uintQ均不包?null 倹{如果您试?Boolean?/p>
Number、int ?uint cd的变量赋?null Q则 Flash Player 会将 null D{换ؓ相应的默认倹{不能将 Null
数据cd用作cd注释?
Number 数据cd
?ActionScript 3.0 中,Number 数据cd可以表示整数、无W号整数和QҎ。但是,Z可能提高性能Q应
?Number 数据cd仅用于QҎQ或者用?int ?uint cd可以存储的、大?32 位的整数倹{要存储点?/p>
Q数字中应包括一个小数点。如果您省略了小数点Q数字将存储为整数?
Number 数据cd使用?IEEE 二进制Q点算术标?(IEEE-754) 指定?64 位双_ֺ格式。此标准规定如何使用 64
个可用位来存储QҎ。其中的 1 位用来指定数字是正数q是负数?1 位用于指敎ͼ它以二进制的形式存储。其?/p>
?52 位用于存?有效位数"Q又UCؓ"数"Q,有效位数?2 ?N ơ幂QN 卛_面所提到的指数?
可以?Number 数据cd的所有位都用于有效位敎ͼ也可以将 Number 数据cd的某些位用于存储指数Q后者可存储
的QҎ比前者大得多。例如,如果 Number 数据cd使用全部 64 位来存储有效位数Q则它可以存储的最大数字ؓ
265 - 1。如果用其中的 11 位来存储指数Q则 Number 数据cd可以存储的最大有效数字ؓ 21023 ?
Number cd可以表示的最值和最大值存储在 Number cȝ名ؓ Number.MAX_VALUE ?Number.MIN_VALUE 的静?/p>
属性中?
Number.MAX_VALUE == 1.79769313486231e+308 Number.MIN_VALUE == 4.940656458412467e-324管q个数字范围?/p>
大,但代h此范围的_ֺ有所降低。Number 数据cd使用 52 位来存储有效位数Q因此,那些要求?52 位以?/p>
的位数才能精表C的数字Q如分数 1/3Q将只是q似倹{如果应用程序要求小数达到绝对精度,则需要用实现小
数Q点算术(而非二进制Q点算术)的Y件?
如果?Number 数据cd来存储整数|则仅使用 52 位有效位数。Number 数据cd使用 52 位和一个特D的隐藏
位来表示介于 -9,007,199,254,740,992 (-253 ) ?9,007,199,254,740,992 (253 ) 之间的整数?
Flash Player 不但?NaN 值用?Number cd的变量的默认|而且q将其用作应q回数字、却没有q回数字的Q
何运的l果。例如,如果您尝试计负数的qx根,l果是 NaN 。其它特D的 Number 值包?正无I大"??/p>
无穷??
注意
在被 0 除时Q如果被除数也是 0 Q则l果只有一个,那就?NaN 。在?0 除时Q如果被除数是正敎ͼ则结果ؓ
正无I大 Q如果被除数是负敎ͼ则结果ؓ负无I大 ?
String 数据cd
String 数据cd表示一?16 位字W的序列。字W串在内部存储ؓ Unicode 字符Qƈ使用 UTF-16 格式。字W串?/p>
不可改变的|像?Java ~程语言中一栗对字符串值执行运会q回字符串的一个新实例。用 String 数据c?/p>
型声明的变量的默认值是 null 。虽?null gI字W串 ("" ) 均表C没有Q何字W,但二者ƈ不相同?
uint 数据cd
uint 数据cd在内部存储ؓ 32 位无W号整数Q它包含一l介?0 ?4,294,967,295 (232 - 1) 之间的整敎ͼ?/p>
?0 ?4,294,967,295Q。uint 数据cd可用于要求非负整数的Ҏ情Ş。例如,必须使用 uint 数据cd来表C?/p>
像素颜色|因ؓ int 数据cd有一个内部符号位Q该W号位ƈ不适合处理颜色倹{对于大?uint 的最大值的?/p>
数|应?Number 数据cdQ该数据cd可以处理 53 位整数倹{uint 数据cd的变量的默认值是 0?
void 数据cd
void 数据cd仅包含一个|undefined 。在早期?ActionScript 版本中,undefined ?Object cd例的默认
倹{在 ActionScript 3.0 中,Object 实例的默认值是 null 。如果您试?undefined 赋予 Object cȝ实例
QFlash Player 会将该D{换ؓ null 。您只能为无cd变量赋予 undefined q一倹{无cd变量是指~Zcd?/p>
释或者用星?(* ) 作ؓcd注释的变量。只能将 void 用作q回cd注释?
Object 数据cd
Object 数据cd是由 Object cd义的。Object cȝ?ActionScript 中的所有类定义的基cRActionScript 3.0
中的 Object 数据cd与早期版本中?Object 数据cd存在以下三方面的区别Q第一QObject 数据cd不再是指
定给没有cd注释的变量的默认数据cd。第二,Object 数据cd不再包括 undefined q一|该g前是
Object 实例的默认倹{第三,?ActionScript 3.0 中,Object cd例的默认值是 null ?
在早期的 ActionScript 版本中,会自动ؓ没有cd注释的变量赋?Object 数据cd。ActionScript 3.0 现在?/p>
括真正无cd变量q一概念Q因此不再ؓ没有cd注释的变量赋?Object 数据cd。没有类型注释的变量现在被视
为无cd变量。如果您希望向代码的读者清楚地表明您是故意变量保留ؓ无类型,可以使用新的星号 (* ) 表示c?/p>
型注释,q与省略cd注释{效。下面的CZ昄两条{效的语句,两者都声明一个无cd变量 x Q?
var x
var x:*
转蝲自:iteye
127.0.0.1 activate.adobe.com
127.0.0.1 practivate.adobe.com
127.0.0.1 ereg.adobe.com
127.0.0.1 activate.wip3.adobe.com
127.0.0.1 wip3.adobe.com
127.0.0.1 3dns-3.adobe.com
127.0.0.1 3dns-2.adobe.com
127.0.0.1 adobe-dns.adobe.com
127.0.0.1 adobe-dns-2.adobe.com
127.0.0.1 adobe-dns-3.adobe.com
127.0.0.1 ereg.wip3.adobe.com
127.0.0.1 activate-sea.adobe.com
127.0.0.1 wwis-dubc1-vip60.adobe.com
127.0.0.1 activate-sjc0.ado
为方便大Ӟ提供几个注册码:
1424-4938-3077-5736-3940-5640
1424-4827-8874-7387-0243-7331
注册机:
/Files/freeman1984/AdobeKey.rar
新的目对用户体验及用户互动要求较高Q决定选用Flex作ؓ前端的展现技术,整体框架仍然是Flex+Spring+Hibernate(考虑采用seam?。作为入门,先从l典的Hello world开始,暂时不考虑Flex与Spring、Hibernate的集成?/p>
Flex要实CJava集成Q开源项?a onclick="javascript:pageTracker._trackPageview('/outbound/article/http://opensource.adobe.com/wiki/display/blazeds/BlazeDS/');" >BlazeDS?a onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.graniteds.org');" >GraniteDS?a onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.exadel.com/web/portal/flamingo');" >Flamingo都提供了相应的解x案,考虑到BlazeDS是Adobe官方的开源项目,因此采用BlazeDs作ؓFlex与Java通信的基框架。什么是BlazeDS呢,看看官方的介l:
BlazeDS is the server-based Java remoting and web messaging technology that enables developers to easily connect to back-end distributed data and push data in real-time to Adobe® Flex® and Adobe AIR™ applications for more responsive rich Internet application (RIA) experiences.
开发工具采用Eclipse+Flex Builder 3 Plug-in方式Q不采用Flex Builder 3。先安装EclipseQ再安装Flex Builder 3 Plug-inQ相关的安装配置不再赘述?/p>
下蝲BlazeDS Turnkey Q?a title="http://flexorg.wip3.adobe.com/blazeds/3.0.x/milestone/3978/blazeds-turnkey-3.2.0.3978.zip" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://flexorg.wip3.adobe.com/blazeds/3.0.x/milestone/3978/blazeds-turnkey-3.2.0.3978.zip');" >http://flexorg.wip3.adobe.com/blazeds/3.0.x/milestone/3978/blazeds-turnkey-3.2.0.3978.zip
׃BlazeDS Turnkey中包含BlazeDS的用例子,对于入门熟悉Flex及BlazeDS都有较好的参考h|因此下蝲BlazeDS Turnkey?/p>
关于blazeds-turnkey 的目录说明:
docsQBlazeDS Javadoc
resourcesQBlazeDS的相x持包Q包括clusteringQ采用jgroupsQ、BlazeDS与ColdFusion 集成的配|文件、BlazeDS的配|文件、BlazeDS与AJAX集成的桥、Flex的SDK、Flex的java library、BlazeDS与Tomcat、Jboss、Websphere{security集成的支持包?/p>
sampledbQhsqldb的启动脚本及样例数据?/p>
tomcatQTomcat ?/p>
blazeds.warQ最化的BlazeDS 文gQ可以作为空白项目来建立BlazeDS 应用E序?/p>
sample.warQBlazeDS的demo例子Q所谓的testdriveQ?/p>
ds-console.war QBlazeDS的部|管理程序?/p>
File->New->Web Project 建立Java helloworld目
在helloworld/src下,新徏com.yeeach.HelloWorldServicec,内容如下Q?/p>
package com.yeeach;
public class HelloWorldService {
public String hello(String var1) {
return “hello ” + var1;
}
public String world(String var1) {
return “world ” + var1;
}
}
3.1、拷贝blazeds.war下的WEB-INF到helloworld的目录下Q覆盖原有的WEB-INF
3.2、在helloworld下徏立flex-src目录Q与src同Q,用于存放flex的相关代?/p>
helloworld/flex-srcQ用于存N目flex的相关代?/p>
helloworld/WebRoot/WEB-INF/flexQ存放flex的相关配|文?/p>
3.3、设|Flex Project Nature
3.4、在helloworld/flex-src下,新徏MXML Application Qhelloworld.mxml Q内容如下:
<?xml version=”1.0″ encoding=”utf-8″?>
<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml”
layout=”vertical”>
<mx:RemoteObject destination=”com.yeeach.HelloWorldService”
id=”helloWorldService”>
<mx:method name=”hello”
result=”sayHelloResult(event)”/>
<mx:method name=”world”
result=”sayWorldResult(event)”/>
</mx:RemoteObject>
<mx:HBox>
<mx:Label text=”输入Q?#8221;/>
<mx:TextInput id=”inputStr”/>
<mx:Button label=”say hello”
click=”sayHello(event);”/>
<mx:Button label=”say world”
click=”sayWorld(event);”/>
</mx:HBox>
<mx:HBox>
<mx:Label text=”l果Q?#8221;/>
<mx:TextArea id=”result”/>
</mx:HBox>
<mx:Script>
<![CDATA[
import mx.rpc.events.FaultEvent;
import mx.controls.Alert;
import mx.rpc.events.ResultEvent;
function sayHello(event:Event):void
{
var inputVar:String=inputStr.text;
helloWorldService.hello(inputVar);
}
function sayWorld(event:Event):void
{
var inputVar:String=inputStr.text;
helloWorldService.world(inputVar);
}
private function sayHelloResult(event:ResultEvent):void
{
result.text=event.result.toString();
Alert.show(event.result.toString(), "q回l果");
}
private function sayWorldResult(event:ResultEvent):void
{
result.text=event.result.toString();
Alert.show(event.result.toString(), "q回l果");
}
]]>
</mx:Script>
</mx:Application>
3.5、修改remoting-config.xmlQ增加对destination的说?/p>
<destination id=”com.yeeach.HelloWorldService”>
<properties>
<source>com.yeeach.HelloWorldService</source>
</properties>
</destination>
3.6、设|Flex Build Path{相兛_?/p>
1)右键->Properties,讄Flex Build Path属性,Main source folder修改为flex-srcQ然后点?#8220;OK”
2)右键->Properties,讄Flex Applications属性,dflex-src下的其他ApplicationQ然后点?#8220;OK”
如果需要添加flex-src子目录下的其他ApplicationQ例如helloworld/flex-src/com/yeeach/helloworld1.mxmlQ,目前从UI界面g无法正确dQ可以直接修?actionScriptProperties,?lt;applications></applications>中间增加相应的Application
<applications>
<application path=”helloworld.mxml”/>
<application path=”com/yeeach.com/helloworld1.mxml”/>
</applications>
3)右键->Properties,讄Flex Compiler属性,Flex SDK version 修改?#8220;Use default”?#8220;Use a specific SDK”Q指向正的Flex SDKQ确?#8220;Additional compiler arguments”配置参数正确Q然后点?#8220;OK”
4)右键->Properties,讄Flex Server属性,配置为正的参数Q然后点?#8220;OK”
3.7、部|helloworld 应用到Tomcat
通过http://127.0.0.1:8080/helloworld/helloworld.swf来访问我们的hello world
3.8、分析helloworld.mxml
<?xml version=”1.0″ encoding=”utf-8″?>
<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml”
layout=”vertical”>
<mx:RemoteObject destination=”com.yeeach.HelloWorldService”
id=”helloWorldService”>
//此处的destination=”com.yeeach.HelloWorldService”与remoting-config.xml中的id=”com.yeeach.HelloWorldService”完全匚w
//id=”helloWorldService”用来在actionscript中标?/em>destination=”com.yeeach.HelloWorldService”Q后面的helloWorldService.hello(inputVar){都使用此id;
<mx:method name=”hello”
result=”sayHelloResult(event)”/>
//mx:method 声明javaccom.yeeah.com.HelloWorldService中的helloҎ及响应结果回调函数sayHelloResult
<mx:method name=”world”
result=”sayWorldResult(event)”/>
</mx:RemoteObject>
<mx:HBox>
<mx:Label text=”输入Q?#8221;/>
<mx:TextInput id=”inputStr”/>
<mx:Button label=”say hello”
click=”sayHello(event);”/>
<mx:Button label=”say world”
click=”sayWorld(event);”/>
</mx:HBox>
<mx:HBox>
<mx:Label text=”l果Q?#8221;/>
<mx:TextArea id=”result”/>
</mx:HBox>
<mx:Script>
<![CDATA[
import mx.rpc.events.FaultEvent;
import mx.controls.Alert;
import mx.rpc.events.ResultEvent;
function sayHello(event:Event):void
{
var inputVar:String=inputStr.text;
helloWorldService.hello(inputVar);
}
function sayWorld(event:Event):void
{
var inputVar:String=inputStr.text;
helloWorldService.world(inputVar);
}
private function sayHelloResult(event:ResultEvent):void
{
result.text=event.result.toString();
Alert.show(event.result.toString(), "q回l果");
}
private function sayWorldResult(event:ResultEvent):void
{
result.text=event.result.toString();
Alert.show(event.result.toString(), "q回l果");
}
]]>
</mx:Script>
</mx:Application>
代码文gQ?a >helloworld.rar