FLEX学习笔记崔宏峰0309.docx

上传人:b****4 文档编号:24331448 上传时间:2023-05-26 格式:DOCX 页数:29 大小:302.93KB
下载 相关 举报
FLEX学习笔记崔宏峰0309.docx_第1页
第1页 / 共29页
FLEX学习笔记崔宏峰0309.docx_第2页
第2页 / 共29页
FLEX学习笔记崔宏峰0309.docx_第3页
第3页 / 共29页
FLEX学习笔记崔宏峰0309.docx_第4页
第4页 / 共29页
FLEX学习笔记崔宏峰0309.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

FLEX学习笔记崔宏峰0309.docx

《FLEX学习笔记崔宏峰0309.docx》由会员分享,可在线阅读,更多相关《FLEX学习笔记崔宏峰0309.docx(29页珍藏版)》请在冰豆网上搜索。

FLEX学习笔记崔宏峰0309.docx

FLEX学习笔记崔宏峰0309

FLEX学习笔记

崔二

宏零

峰一

 

一、配flex环境

需要软件:

1.jdk

2.tomcat

3.myeclipse

4.flexbuilder插件

5.blazeds.war

其它的安装比较简单。

只是装flexbuilder时注意。

有一步要选myeclipse的安装路径才行。

然后把D:

\ProgramFiles\adobe\AdobeFlashBuilder4Plug-in\eclipse下的features和plugins文件夹放在myeclipse的D:

\ProgramFiles\Genuitec\Common下(myeclipse8以后就是这种路径。

7好像是单独有一个eclipse文件夹),然后还有一个AMT文件夹放到D:

\ProgramFiles\Genuitec\MyEclipse-8.6\AMT文件夹(这个不知道是为啥)

(注:

也有人不拷贝这些。

只是像上边那样直接安装。

行不行有待考证)

二、建立采用flex的web工程

因为flex只是做为表示层展示,flex只接收java返回数据,那怎么和java服务端通信呢?

这时我们需要用到adobe公司开发的一个开源项目Blazeds。

Blazeds是一个基于服务器的Java远程控制(remoting)和Web消息传递(messaging)技术,以LGPL(LesserGNUPublicLicense)公共许可证书发布。

它能够使得后端的Java应用程序和运行在浏览器上的AdobeFlex应用程序相互通信。

在Java应用服务器上,它以servlet的形式存在,因此可以在任何标准Java网络应用中运用它。

下载好核心包解压出来就发现一个文件名是Blazeds.war,我们只需要把Blazeds.war改成Blazeds.rar然后解压就会出现:

1.打开Myeclise8.0新建一个javaweb工程,选择javaEE5.0如图

2.把blazeds解压后的2个文件夹覆盖到WebRoot下面,展开发现在WEB-INF目录下面多了flex文件夹,这个很重要主要是通信的4个配置文件。

如图:

3.web.xml的解说

xmlversion="1.0"encoding="UTF-8"?

>

DOCTYPEweb-appPUBLIC"-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN""

BlazeDS

BlazeDSApplication

--HttpFlexSessionattributeandbindinglistenersupport监听Flex通信session-->

flex.messaging.HttpFlexSession

--MessageBrokerServletservices-config.xml这个配置文件重要,通信服务的主要配置文件-->

MessageBrokerServlet

MessageBrokerServlet

flex.messaging.MessageBrokerServlet

services.configuration.file

/WEB-INF/flex/services-config.xml

1

MessageBrokerServlet

/messagebroker/*

index.html

index.htm

--forWebSpheredeployment,pleaseuncomment-->

--

FlexMessagingWorkManager

wm/MessagingWorkManager

com.ibm.websphere.asynchbeans.WorkManager

Container

Shareable

-->

3.部署项目文件到tomcat里面。

这部重要因为下面要整合flex必须得启动服务。

我部署的服务器物理路径为:

D:

\ProgramFiles\ApacheSoftwareFoundation\Tomcat7.0\webapps\test。

把项目文件部署到tomcat下后(新安装一个tomcat服务器,不能用eclipse自带的)。

下边建立flex项目才能选。

4.转换为flex项目,首先选中你的web项目右键选择添加/更改项目类型,在选择添加flex项目类型

5.选服务器为j2ee,然后选择Blazeds

6.下一步配置你的服务器路径,上面说了我的项目发布到D:

\ProgramFiles\ApacheSoftwareFoundation\Tomcat7.0\webapps\test所以我下面就填如下信息

根文件夹就是服务物理路径,根URL就是你的访问路径,我这里tomcat的端口是8080所以就这样填,看你的端口而定然后在加上你的项目名称,上下文根目录就填项目名称就行了。

最后输出路径我把后面的目录改为flex。

记得点一下验证配置只有通过才有效

注:

解决创建的错误:

点重新重建html模板即可

7.新的问题又来了,src是java的源文件夹存java源代码地方,但是现在被flex给占用了

8.更改flex的项目源文件为flex_src,右键项目属性找到flex构键路径的主源文件夹把src改为flex_src

9.然后把src文件夹里面的flexweb.xml移动到flex_src文件夹里面,最终目录路径

 

三、准备工作完成了。

现在开始正式学习

 

学习ac3基础语法的在线手册

经验总结。

打开别人或者别的机器的eclipse工程一般会报错。

要重新建个工程。

然后把相应的程序和配置文件复制过去一般就不会报错了。

注意!

!

!

何为internal?

答:

internal是一个命名空间。

在此命名空间的调用必须处于同一个包才可以。

否则会报错。

如:

internalfunctioninit():

void{

styleArr.push("ButtonClick");

styleArr.push("HsliderValue");

cmbStyle.dataProvider=styleArr;

}

数据绑定?

答:

Flex实际上在编译的时候会产生一些Watcher代码去监视绑定标签所指定的表达式。

在运行的时候,当绑定源的属性得到修改,那么这个Watcher监视类就会触发change事件去执行绑定更新的工作。

在Flex中有三种绑定数据方式:

 

1、{} --这种最常用。

TextInputx="68"y="10"id="sText"/>

TextAreax="69"y="53"id="dText"width="205"text="{sText.text}"/>

绑定一个属性或者一段AS的表达式已经应用的非常普遍了。

偶尔我们需要用到绑定的是一个AS的函数,但是,绑定一个函数的时候很多人会碰到问题,为什么我的数据没有自动更新呢?

本人也曾经碰到过,看了开发文档才知道,原来忽略了一个细节问题。

 

就是在绑定函数的时候,通常情况下需要一个bindable的property作为该函数的参数。

如:

1.

xml version="1.0"?

>  

2.

– binding/ASInBraces.mxml –>  

3.

Application xmlns:

mx="  

4.     

Script>  

5.          

[CDATA[  

6.              [Bindable]  

7.              public var inString:

String; // 绑定此变量  

8.           

9.              public function getNewText(sourceString:

String):

String {  

10.                   return sourceString.toUpperCase();  

11.              }  

12.         ]]>  

13.     

Script>  

14.     

TextInput id="myTI" text="Enter text here"/>  

15.     

Button label="Trigger Binding" click="inString=myTI.text;"/>  

16.     

TextArea text="{getNewText(inString)}"/>  

17.

Application>

click="inString=myTI.text;"――这种相当于直接执行一个表达式

TextArea text="{getNewText(inString)}"/>--这样写会自动执行这个函数。

然后取绑定过去的值

2、

Binding>taginMXML 

1.

xml version="1.0"?

>  

2.

– binding/ASInBindingTags.mxml –>  

3.

Application xmlns:

mx="  

4.     

Script>  

5.          

[CDATA[  

6.              public function whatDogAte():

String {  

7.                   return "homework";  

8.              }  

9.         ]]>  

10.     

Script>  

11.     

Binding source="’The dog ate my ‘+ whatDogAte()"  destination="field1.text"/>  

12.     

Binding  source="{’The dog ate my ‘+ whatDogAte()}" destination="field2.text"/>  

13.     

Binding source="The dog ate my {whatDogAte()}" destination="field3.text"/>  

14.     

TextArea id="field1"/>  

15.     

TextArea id="field2"/>  

16.     

TextArea id="field3"/>  

17.

Application>

3、BindingUtilsmethodsinActionScript

这种方法是使用mx.binding.utils.BindingUtils类来实现的。

 

如:

 

BindingUtils.bindProperty(textarea,"text",textinput,"text"); 

就是直接绑定了两个输入框的text属性,还可以用bindSetter来绑定一个数据源和一个set函数。

如:

 

publicfunctionmySetterBinding(event:

FlexEvent):

void{ 

    varwatcherSetter:

ChangeWatcher= BindingUtils.bindSetter(setMyString,textInput2,"text"); 

这里就是将textInput2的text属性setter函数和setMyString函数绑定起来, 

一旦textInput2的text被修改,那么将会触发setMyString函数。

[Bindable]是什么意思?

[Bindable]大概又是Flex用得最多的元数据了。

    啥是元数据(metadata)首先要明白元数据不是语法的一部分,而是专门给编译器用的,说白了是告诉编译器做某些事情,学过java之类的应该知道。

那Bindable来讲,它的作用是告诉flex编译器,给某些某些东西建立绑定关系,flex编译器会在编译过程中给AS(flex编译器就是把mxml编译成as,再编译到swf,也可能直接编译倒swf,我这里假设有as这么个环节)加一点事件发生和处理之类的代码,由此绑定的关系便建立了,如果我们用纯粹as3代码来写也是可以实现的,就是太太太麻烦。

啥是绑定

举个例子:

给下面的public变量加上[Bindable]

 

[Bindable] 

publicvarname:

String="";

作为一个public变量,肯定既可以被赋值,也能赋值给别的变量。

绑定的作用就是,当name改变的时候(被赋值了),可能通知其它被name影响(赋值给它们)的变量发生改变。

这里的“可能”就需要编译器来判断,这就是为什么元数据是给编译器用的原因了。

在mxml里用{}的语法的地方就是绑定的对象,比如label={xxx.name},当name变化,label也跟着变化。

这样,我们只是很简单的改变了name的值,由于有绑定,界面上的label也跟着自动变化了,爽吧。

Eclipse下的flex插件技巧,

技巧一:

同类属性放一行。

比较整洁

Panelx="59"y="63"

width="400"height="250">

Panel>

技巧二:

在控件属性行里按“空格”,会出现这个控件的所有属性

技巧三:

Ctrl+”~”是代码界面和设置界面切换

技巧四:

Spark组件更方便的定义组件的样式。

它比较灵活.

>型更适合简单的定义组件的样式

Panelx="59"y="63"

width="400"height="250">

Panel>

Panel>

Panel>

技巧五:

xmlversion="1.0"encoding="utf-8"?

>

Applicationxmlns:

fx="

xmlns:

s="library:

//

xmlns:

mx="library:

//

creationComplete="initApp()"

minWidth="955"minHeight="600">

--这里的creationComplete="initApp()"意思是最先执行这个函数

技巧六:

定义VO:

VO是跟数据库里表的映射,一个表对应一个VO ,也可以不完全相同。

即表10个字段。

VO5个字段

DAO是用VO来访问真实的表,对数据库的操作都在DAO中完成

O/RMapping是ObjectRelational Mapping(对象关系映射)的缩写。

通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据。

在O/R Mapping的世界里,有两个基本的也是重要的东东需要了解,即VO,PO。

 

VO,值对象(ValueObject)

PO,持久对象(Persisent 

Object),它们是由一组属性和属性的get和set方法组成。

从结构上看,它们并没有什么不同的地方。

但从其意义和本质上来看是完全不同的。

 

1.VO是用new关键字创建,由GC回收的。

 

  PO则是向数据库中添加新数据时创建,删除数据库中数据时削除的。

并且它只能存活在一个数据库连接中,断开连接即被销毁。

 

2.VO是值对象,精确点讲它是业务对象,是存活在业务层的,是业务逻辑使用的,它存活的目的就是为数据提供一个生存的地方。

 

  PO则是有状态的,每个属性代表其当前的状态。

它是物理数据的对象表示。

使用它,可以使我们的程序与物理数据解耦,并且可以简化对象数据与物理数据之间的转换。

 

3.VO的属性是根据当前业务的不同而不同的,也就是说,它的每一个属性都一一对应当前业务逻辑所需要的数据的名称。

 

PO的属性是跟数据库表的字段一一对应的。

 PO对象需要实现序列化接口。

VO(valueobject)值对象 

通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。

但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要. 

不要纠结于什么O中,只需要大概明白什么意思。

并且应用到实际中就行了.vo是业务角度的抽象java表。

Po是一对一的数据表抽象表。

Dao负责具体的数据库操作。

一般包括增删改查等操作。

一般dao外面还有个接口类。

只定义空的方法。

没觉得有屁用。

上面讲这么多。

主要是想说一个事。

Flexas定义的vo.要和java的vo类的名字相同(当然字段名也最好一致,别给自己找麻烦)。

要不会报错。

Undefined错误。

出现这个现象的原因,一般是由于参数名称不匹配所致。

仔细检查一下你的as端的vo对象的名称,是否和java端接收对象的大小写完全一致,另外还须检查采用RemoteObject的时候,所用的java端方法名的首字母是否为小写(根据采用package不同而情况不一样)。

再有就是类型是否一致,比如as端用String类型,java端也一定要用String类型,as端用ArrayCollection类型,java端要用List类型等等,如果是用entity传递,那么as端的Object内容和java端的entity结构是否完全一致。

正确的方式为:

JAVA部分:

packagecom.test;

publicclassUserVo{

privateintid;

privateStringuser_id;

privateStringpassword;

publicintgetId(){

returnid;

}

publicvoidsetId(intid){

this.id=id;

}

publicStringgetUser_id(){

returnuser_id;

}

publicvoidsetUser_id(StringuserId){

user_id=userId;

}

publicStringgetPassword(){

returnpassword;

}

publicvoidsetPassword(Stringpassword){

this.password=password;

}

}

Flex部分:

packagecom.flex

{

[RemoteClass(alias="com.test.UserVo")]

publicclassUserVo

{

//好像是如果是public型,那么就不用再写getter,setter方法

publicvarid:

int;

publicvaruser_id:

String;

publicvarpassword:

String;

//publicfunctiongetId():

int

//{

//returnid;

//}

//publicfunctionsetId(value:

int):

void

//{

//id=value;

//}

//publicfunctiongetUser_id():

String{

//returnuser_id;

//}

//publicfunctionsetUser_id(value:

String):

void{

//user_id=value;

//}

//publicfunctiongetPassword():

String{

//returnpassword;

//}

//publicfunctionsetPassword(value:

String):

void{

//password=value;

//}

}

}

技巧七:

关于flex的命名空间

技巧八:

数据校验组件举例

必须定义在

Declarations>区间内,source是校验的控件id

Declarations>

--将非可视元素(例如服务、值对象)放在此处-->

StringVali

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 财务管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1