Flex+Java项目开发心得
一、花岗岩插件安装
1.把flexTasks.jar,flexTasks.tasks 复制到Flex sdks\3.0.0\lib下
2.把org.granite.gas3_1.0.0文件夹,复制到eclipse\plugins
2.删除eclipse\configuration\org.eclipse.update文件夹
3.启动eclipse。
4.把build.xml、env.properties复制到项目根目录下。
5.修改env.properties里的FLEX_HOME、FLEX_TASKS_JAR 为实际路径
(FLEX_HOME是flex sdk路径 FLEX_TASKS_JAR 默认放在FLEX_HOME下的\lib下)
6.修改APP_NAME 为部署后的web上下文名称。
7.修改build.xml里的generate.as3任务
例如:
1) <gas3 outputdir="flex_src">
指定了生成的*.as的输出路径
2)<fileset dir="WebContent/WEB-INF/classes">
<include name="com/gdtopway/tc/domain/*.class"/>
</fileset>
指定了要生成*.as的java包路径。
8.运行build.xml
9.修改生成的XXBase.as文件的基类。
从“implements IExternalizable”修改为“extends HibernateBean”
同时在as引用“import net.digitalprimates.persistence.hibernate.HibernateBean;”
如果没有这个swc,请先引用“dpHibernate_flexLibrary.swc”
二、Flex项目与Java项目的结合
1.新建一个Java项目,把.actionScriptProperties、.flexProperties、.project文件复制到项目根目录下,然后refresh项目。
.project文件中有用的内容
<buildCommand>
<name>com.adobe.flexbuilder.project.flexbuilder</name>
<arguments>
</arguments>
</buildCommand>
<natures>
<nature>com.adobe.flexbuilder.project.flexnature</nature>
<nature>com.adobe.flexbuilder.project.actionscriptnature</nature>
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
</natures>
2.右键点击properties查看项目属性,会发现多了关于flex的属性。
3.flex和java是分开编译的,各自独立。
4.Java Build Path:java的.class文件输出到{项目根目录}/{WebContent}/WEB-INF/classes
5.flex Build Path-〉Source Path:
源文件路径(存放as文件和mxml文件):一般在{项目根目录}/flex_src
Output folder( swf文件输出路径):一般在{上下文路径}/bin
Output folder URL(调试用的URL路径):http://localhost:7001/{上下文路径}/bin
6.flex Build Path-〉Library Path:
一般包括
1)flex的sdk
2)被flex项目引用的swc文件的路径,一般放在{项目根目录}/flex_libs下面
(swc文件与as文件的相互关系,有点像war文件与java文件的相互关系,可以看作一个打包了的目录)
7.Flex Compiler指定项目使用的flex sdk及编译选项
一般地 要修改Compiler arguments
-services "F:\JavaTools\IDE\eclipse3.3_WTP\workspace\FSPowerAudit(Flex)\FSPowerAudit/WEB-INF/flex/services-config.xml" -locale en_US
前一个参数指定services-config.xml的绝对路径,后一个参数指定语言选项。services-config.xml用于配置flex对java后台的调用。
8.Flex Applications
用于指定项目中的flex主程序({项目名}.mxml,其中带有<application>标记)
一个项目可以有多个flex主程序,但其中只有一个是默认的。
9.Flex Modules
用于指定flex主程序可以加载的模块(Modules),凡是要加载的模块都必须手工在这里添加,添加的时候要指定为哪个flex主程序添加,以及模块编译后的swf文件的名称和路径
10.flex Server指定flex程序部署的Root URL和Context root。
三、flex代码与java代码的交互。
1.一般地mxml文件存放标记,as文件存放脚本。公共的脚本一般会抽出来,放在公共的文件夹下,然后在mxml文件中引用,例如:
<mx:Script source="../../media/as/LayoutUtils.as"/>
<mx:Script source="../../media/as/EventUtils.as"/>
<mx:Script source="../../media/as/DataGridUtils.as"/>
<mx:Script source="../../media/as/DateFormatUtils.as"/>
2.java代码由flex代码调用。
1)flex代码先在本地编译好成为swf,然后部署到web容器中。
2)flex代码通过amf格式,调用java代码,java代码先编译好,对应的class文件存放在web容器中{应用程序上下文}/WEB-INF/Classes文件夹下,供由flex编译出来的swf文件调用。
3)方法类的java对象通过RemoteObject的方式调用;RemotObject和java代码中的方法类对应,这些方法类的方法有时候会接收实体类作为参数,在RemoteObject中使用java的实体类要通过代理类。一般地一个java实体类对应一个同名的as文件(as类),这个as类的字段和java实体类的字段一一对应。这些java实体类的as代理类可以通过手工编写,也可以通过花岗岩插件自动生成。
3.要使用flex的RemoteObject有几个配置文件需要配置。
1)一般地这几个配置文件放在{上下文路径}/WEB-INF/flex下,安装flex builder后建立flex project eclipse会自动生成这几个文件,复制过去就ok了。
2)service-config是最重要的一个文件,里面会引用其他文件
<service-include file-path="remoting-config.xml" />
<service-include file-path="messaging-config.xml" />
<system>
<redeploy>
<enabled>true</enabled>
<watch-interval>20</watch-interval>
<watch-file>{context.root}/WEB-INF/flex/services-config.xml</watch-file>
<watch-file>{context.root}/WEB-INF/flex/remoting-config.xml</watch-file>
<watch-file>{context.root}/WEB-INF/flex/messaging-config.xml</watch-file>
<touch-file>{context.root}/WEB-INF/web.xml</touch-file>
</redeploy>
</system>
3)要使用remoteObject,remoting-config.xml有几个地方需要修改
<!-- 非延时加载用此适配器 -->
<adapter-definition id="java-adapter" default="true"/>
<destination id="attachmentDAO">
<properties>
<factory>springFactory</factory>
<source>attachmentDAO</source>
</properties>
</destination>
<source>里面的是spring里定义的ID,<destination id="XX">是flex文件里使用的ID
4)remoteObject的调用例子:
private function getAuditType():void
{
var service:RemoteObject =new RemoteObject();
service.destination = "billService";
service.getAduitCode.addEventListener(FaultEvent.FAULT,faultEventHandler);
service.getAduitCode.addEventListener(ResultEvent.RESULT, getAuditTypeResult);
service.getAduitCode();
}
private function getAuditTypeResult(event:ResultEvent):void
{
dsDgAuditType = event.result;//成功时候往往是为datagrid提供dataprovider
}
1)新建一个remoteObject
2)为这个RemoteObject增加事件侦听:FaultEvent.FAULT失败时候的处理、ResultEvent.RESULT成功时候的处理。
3)为事件侦听建立相应函数。成功时候往往是为datagrid提供dataprovider,失败的时候往往是打印错误信息。
四、部署调试
启动web容器,启动flex Application