1、Flex程序员培训教程 Flex产品 概述 学习FLEX,必须了解什么是RIA。 RIA,Rich Internet Application ,也就是富互联网应用。这个富字是重点。传统的HTML页面元素非常有限,开发人员在页面刷新和相应速度都受到较大的困扰。 FLEX ,最开始是由Macromedia公司2004年发布,2005年4 月,Adobe公司收购Macromedia公司,现在FLEX系Adobe公司系列产品。官方网站:. Flex拥有两种开发语言: MXML:一种XML标识语言,用来进行组件布局,数据绑定等,和HTML语言有点类似。 Act
2、ionScript:现在用的版本是3.0,flex的编程语言,一般业务逻辑操作需要用到,可以完成MXML的所有操作。 Flex3包含以下几个部分: Flex3 SDK是Flex产品最基础也是必需的组件。包括编译器、Flex类库以及调试工具。 Flex Builder 3/flash Builder 4是基于eclipse的集成开发环境。支持可视化界面以及MXML和ActionScript编写,可以下载独立的Flex 开发工具(Flex Builder 3/flash Builder 4),也可以下载插件(作为eclipse的插件)使用。 Flex的安装 Flex Bu
3、ilder 3和Flash Builder 4安装基本一样。 选择好语言环境,点击OK,开始安装: 安装完成以后,启动Flex Flex Builder 3的启动页面 安装好的Flex 对应的目录结构如下: Flex Builder的启动文件 对应的sdk文件夹, 包含sdk2.0和sdk3.1两个不同的版本 Flex对应的插件包 Flex开发入门 Hello world 案例的开发 案例描述 通过经典的“Hello World”案例来了解Flex的运行方式。 开发步骤 启动Flex Builder 3 通过
4、开始à程序àAdobeàFlex Builder 3”启动Flex开发环境。 创建项目 打开Flex Builder 3之后,选择“FileàNewàFlex Project”创建一个新项目; 点击此处切换透视图 1) 在弹出的“Flex Project”视图中,配置相关参数。“项目名称”:FlexTest,如图2.1-2所示。 点击Next,选择Flex编译后的输出目录,默认的就可以了 点击Next,可以指定原码路径,默认为src,可以选择SDK的版本等 编译后输出目录 点击Finish。 创建好的项目目录结构如下: 公共库(swc文件)的
5、存放目录 1、原码路径 编译部署、运行 选中FlexTest.mxml,打开此文件,输入如下代码 选中FlexTest,点击运行 效果如下,点击“Hello world”按钮,弹出一个对话框,显示“Hello World!” Flex常用组件 1、Label 2、TextInput 3、TextArea 4、ComboBox 5、DateField 6、Button 7、DataGrid 。。。。。 Label主要用于字段说明,就像下图的“用户名:”和“用户说明”,一般Label字段的显示值不作为数据提交;TextInput
6、用作文本值输入,不支持换行,如果想要输入的值可以换行可以使用TextArea,TextInput和TextArea跟html中text和textarea完成的任务是一样的,用于数据的提交和显示。 ComboBox下拉框,提供数据选择,比如说性别、类型等 DateField日期框,对于需要用到日期的地方很有用 可以通过设置formatString来改变日期的格式,比如说formatString=”YYYY-MM-DD”,则显示的值为“2011-03-08” Button按钮,Button使用非常普遍,在进行前后台交互的时候往往使用按钮来提交数据,
7、
DataGrid,用于数据列表的显示,比如说要显示一个查询后的列表集合,DataGrid就非常有用了
Flex常用数据校验控件
8、种常用的,当然还有其他数据校验控件,比如说对电话号码、信用卡等的校验。
Flex深入开发
在深入开发过程中将使用Flash Builder 4和SDK3.3版本,用我们在实际开发中使用的UITemplate+jump这两套框架。
UITemplate中常用的控件介绍
1、
9、要进行多选,可以设置allowMultipleSelection=”true”,上图导入xmlns:bankcomm=”
com.bankcomm.*”是为了支持数据字典的使用,如下代码所示
10、如下图所示:
效果如下,可以通过设置allowMultipleSelection=”true”来进行多选,和上面描述的列表不同点就是这个显示列表没有复选框;它同样也支持数据字典,对数据字典的使用和上面的列表是一样的
4、
11、以看到点击下拉框会弹出一连串的树,
6、 12、d/>数字控件,如下图所示:
效果如下,这个控件只能输入数字类型的数据,可以控制只能输入整数或者可以输入小数,
也可以通过点击来清空已输入的数据
10、 13、ls.*",如下图所示:
效果如下,可以点击复选框选中一条记录,如果要支持多选,可以设置allowMultipleSelection="true"(默认就是多选)
开发案例描述
Ø 案例的基本需求
在数据库中存在一个学生信息表,通过Flex+jump架构能够进行学生信息的查询、增加、修改、删除。
在查询功能中,以学生姓名、性别、出生日期范围作为查询条件,其中学生姓名为模糊查询,性别为完全匹配查询且通过下拉列表选取查询条件,查询结果要求分页处理。
Ø 学生信息表STU的表结构
字段名称
数据类型
数据长度
是否主键
备 注
STUID
VA 14、RCHAR(10)
10
YES
学生编号
STUNAME
VARCHAR(40)
40
NO
学生姓名
SEX
CHAR
1
NO
1-男,2-女,3-未知
AGE
INT
NO
年龄
ADDRESS
VARCHAR(100)
200
NO
家庭住址
PHONE
VARCHAR(20)
20
NO
联系电话
BIRTH
Date
NO
出生日期
开发步骤
创建数据库表(省略,已经设置好)
Ø 建表SQL脚本(DB2)
drop table STU;
CREATE TABLE STU
(
STU 15、ID VARCHAR(10) not null ,
STUNAME VARCHAR(40),
SEX CHAR2(1),
AGE INTEGER,
ADDRESS VARCHAR(200),
PHONE VARCHAR(20),
BIRTH DATE,
CONSTRAINT PK11 PRIMARY KEY (STUID)
);
Ø 初始数据SQL脚本
insert into STU value 16、s('1000000','张三丰','1',25,'北京海淀区中关村大街01号','13923070219',DATE('1985-11-23'));
insert into STU values('1000001','张无忌','1',26, '上海张江高科技园区碧波路456号','13572113015',DATE('1984-11-30'));
insert into STU values('1000002','张小宝','0',23,'北京市海淀区彩和坊路8号天创科技大厦东门1301室','13804061974',DATE('1987-05-19'));
insert into 17、 STU values('1000003','赵大海','2',24,'广州市天河区体育东路122号羊城国际商贸中心大厦西塔2102-2104室','15123040319',DATE('1986-03-31'));
insert into STU values('1000004','赵小新','0',25,'北京海淀区中关村22号','15823010577',DATE('1985-05-08'));
insert into STU values('1000005','李中正','2',23,'成都高新区创新中心起步区府河基地高朋大道12号B座209-210室','15323010356 18、',DATE('1987-04-19'));
insert into STU values('1000006','李亚南','0',24,'长沙市国家高新技术开发区火炬村M2组团金荣科技园7楼','13923010319',DATE('1986-12-24'));
搭好flex+jump的开发环境
Ø 将下载下来的UITemplate改名为student,并导入到Flash Builder 4的包资源管理器中(UITemplate由项目组提供),如下图所示:
在包资源管理器中右击à导入à选择Flash Builder 项目à下一步à选择项目文件夹à浏览(选择你已改名为stud 19、ent的这个项目)à完成
导入好项目之后需要查看一下SDK版本是不是正确的,通过右击student(项目)à属性àFlex编译器à注意看版本是不是Flex 3.3SDK,如果不是,则需要更换版本
Flex搭建好之后,将src目录下的loginurl.json修改为以下代码:
{
"RSP_HEAD":{"TRAN_SUCCESS":1},
"menuList":[{"name":"学生信息管理","leaf":false,"shortCount":0,"nodeaction":":9081/eos-default/m3_uidemo/testPage.html 20、","nodetype":3,
"id":"CMIS","children":[{"appid":"CMIS","name":"学生信息维护","module":"stu/StudentIndex.vxml","leaf":true,"shortCount":0,"nodeaction":
":9081/eos-default/m3_uidemo/testPage.html","nodetype":3,"id":"100"}]}]}
这是一段JSON报文,在flex+jump框架中前后台的数据传递用的就是JSON报文格式。
这样设置好以后,就可以运行这个Flex框架了,通过点击,运 21、行后的结果如下图所示:
可以输入任何用户名和密码(因为这只是一个模板),点击登录,显示页面如下:
注意左边显示的功能菜单项,是我们刚刚在loginurl.json中配好的信息,不过现在还不能用,只是一个模型而已。
如果在点击时出现了如下错误,
则需要设置“Web 浏览器”,窗口à首先参数à常规àweb 浏览器àinternet Explorerà确定,如下图所示:
Ø 配置好jump后台,将jump-demo(with Eclipse).rar下载下来之后解压(相应的demo由项目组提供),解压之后打开Eclipse,路径就在解压目录下(eclipse/eclip 22、se.exe),打开后如下图所示:
导入项目组提供的一个名叫plrm的后台应用,在这个应用的基础上进行练习。
首先需要开发人员配置一下jdk,用jdk1.5就可以了;
配置config目录下的jump-db.xml(连接数据库的配置)设置连接数据库的url、用户名和密码即可,如下代码所示:(省略,已经设置好)
23、lue=""/>
然后点击start运行一遍,如果不报错就代表成功了,接下来就是进行代码的开发了。
前后台代码的开发
Ø Flex页面代码的编写
1、 新建一个stu的包名,如下图所示:
2、 创建好stu包以后,在这个包下面创建一个模块名为StudentIndex,步骤如下图所示:
点击完成,生成StudentIndex.mxml,代码如下:
24、
在这里创建模块的原因是可以通过模块来加载部分信息,不需要一运行index就加载所有的信息,减轻了一下加载大量信息给服务器造成的压力;用模块还有一个好处是能够使应用结构清晰明了。
创建好模块之后就是编写代码了,以学生姓名、性别、出生日期范围作为查询条件查询出学生列表信息,编写好的代码如下:
一、 Flex端
1、 在StudentIndex.mxml中编写如下代码
25、height="100%" creationComplete="queryList();" xmlns:expand="com.doubleClick.*"
xmlns:jwolib=" xmlns:bankcomm="com.bankcomm.*">
26、"vertical">
27、t appearAsLabel="false" change="stuName.showClearButton=(stuName.text != '')" clear="stuName.showClearButton=false;" showClearButton="false"
id="stuName" width="200" maxChars="40"/>
28、 text="性别:" width="148" textAlign="right"/>
29、ay>
30、horizontalGap="0">
31、learButton="true" showToday="true" yearNavigationEnabled="true" formatString="YYYY-MM-DD"/>
32、x>
35、 width="70"/>
36、 37、dColumn dataField="age" headerText="学生年龄" dataTipField="age" />
38、aTipField="address" />
39、bankcomm.Connect;
import com.bankcomm.URLParameter;
import mx.controls.Alert;
import mx.core.Application;
import mx.events.CloseEvent;
import mx.managers.PopUpManager;
import xxx_Util.Global;
//新增学生信息后台访问路径
private var addStuUrl:String=Global.IP+"addSt 40、u.ajax";
//修改学生信息后台访问路径
private var editStuUrl:String=Global.IP+"editStuByStuId.ajax";
//删除学生信息后台访问路径
private var delStuUrl:String=Global.IP+"delStuByStuId.ajax";
//设置查询学生信息的条件
private function setObj():Object{
var obj:Object=new Object();
obj.stuName=stuN 41、ame.text;
obj.sex=sex.selectedItem==null?"":sex.selectedItem.data;
obj.birthStart=birthStart.text;
obj.birthEnd=birthEnd.text;
return obj;
}
//查询学生信息
private function queryList():void{
gridPage.param=setObj;
gridPage.loadData();
}
//点击重置按钮时 42、调度,用来清空条件元素
private function initSelect():void{
stuName.text="";
stuName.htmlText="";
sex.selectedValue="";
sex.selectedIndex=-1;
birthStart.text="";
birthEnd.text="";
}
//学生信息新增
private function add_stu():void{
//创建一个弹出式的TitleWindow,用来进行学生信息 43、的新增
var studentOper:StudentOper=StudentOper(PopUpManager.createPopUp(Application.application.parent,StudentOper,true));
//设置TitleWindow的标题信息
studentOper.title="学生信息新增";
//定义页面元素为可编辑的
studentOper.writable=true;
//给TitleWindow的sure按钮增加一个监听
studentOper.sure.addEventLi 44、stener(MouseEvent.CLICK,function(event:MouseEvent):void{
if(studentOper.checkStu())
{
//设置新增学生信息所需的参数
var param:URLParameter=new URLParameter();
param.trainID="";
param.trainProcess="";
param.reqBody={PARAMS:studentOper.getValues()};
//访问后台进行学生信息 45、的新增
Connect.request({url:addStuUrl,params:param.toParameter(),callback:function(r:Object,e:Event):void{
//如果新增成功,则关闭titileWindow,并刷新主页面的列表信息
if(r.RSP_HEAD.TRAN_SUCCESS=="1")
{
//通过派发出一个CloseEvent.Close事件来关闭TitleWindow
studentOper.dispatchEvent 46、new CloseEvent(CloseEvent.CLOSE));
gridPage.loadData();
}
}});
}
});
PopUpManager.centerPopUp(studentOper);
}
//学生信息修改
private function edit_stu():void{
//判断主页面的列表是否选择了记录
if(stuGrid.selectedItems==nu 47、ll || stuGrid.selectedItems.length==0)
{
Alert.show("请选择需要修改的学生记录","提示");
return;
}else if(stuGrid.selectedItems.length!=1){
Alert.show("只能选择一条学生记录进行修改","提示");
return;
}
//创建一个弹出式的TitleWindow,用来进行学生信息的修改
var studentOper:StudentOper=StudentOper(PopUpMa 48、nager.createPopUp(Application.application.parent,StudentOper,true));
//设置TitleWindow的标题信息
studentOper.title="学生信息修改";
//定义页面元素为可编辑的
studentOper.writable=true;
//给TitleWindow的页面元素设置值
studentOper.setValues(stuGrid.selectedItem);
//给TitleWindow的sure按钮增加一个监听
stude 49、ntOper.sure.addEventListener(MouseEvent.CLICK,function(event:MouseEvent):void{
if(studentOper.checkStu())
{
//设置修改学生信息所需的参数
var param:URLParameter=new URLParameter();
param.trainID="";
param.trainProcess="";
param.reqBody={PARAMS:studentOper.getValues()};
//访问后台进行学生信息的修改
Connect.request({url:editStuUrl,params:param.toParameter(),callback:function(r:Object,e:Event):void{
//如果修改成






