我们要实现的目的:
1.希望在eclipse里面可以创建flex项目。
2.在flex中编辑的mxml文件,保存后能够自动的生成flash文件和html文件以供测试,当然正式发布的时候很多的HTML是要删除的。
3.利用eclipse在工程中实时同步机制,把我们编译后的flash和html文件直接同步到web工程,然后工程自动部署到tomcat,这样测试就很方便了,因为同步flash和html文件到tomcat根本就不用重新启动。
注意我们的关键点本质上只是把flex项目的编译输出直接到web工程。
环境搭建:我的环境是eclipse3.4,里面集成了FB3_WWEJ_Plugin.exe,jdk是1.5
blazeds与web工程的搭建:eclipse中先创建个web项目myflex,注意要导入blazeds里面的相关jar包,web.xml,还有WEB-INF里面flex目录下面的所有文件。
接下来在服务器端可以简单的写个helloWorld的类了,相关的配置弄好
package com.spell;
public class HelloWorld {
public String sayHello(String name) {
return "hello," + name;
}
}
在WebRoot/WEB-INFO/remoting-config.xml中加入id="Hello"的destination
<destination id="Hello">
<properties>
<source>com.spell.HelloWorld</source>
</properties>
</destination>
ok,可以部署到tomcat了,并且启动tomcat,这个时候不要着急着去测试
flex工程的搭建:这个是最让人恼火的地方了,这个地方上我走了很多的弯路,看那了网络上很多人所谓的配置,结果差点把我给搞死。后来还是自己的思路清晰点。
建个flex工程,输入工程的名称flexTest,application type 选择 web application, server technology 选择none,点next,output folder 中选择你上面建立web工程的目录(这里就是myflex了),这个很重要了,要不这边flex就不会自动到web工程了,那只有人工的拷贝了,这样做是很悲哀滴!!最后finish,好了这样flex工程也好了
flexTest.mxml文件
------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script >
<![CDATA[ import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
[Bindable]
private var helloResult:String;
private function sayHello():void {
ro.sayHello(inputText.text);
}
private function resultHandler(event:ResultEvent):void {
helloResult = event.result as String;
}
]]>
</mx:Script >
<mx:RemoteObject id="ro" destination="Hello" result="resultHandler(event)"
endpoint="/myflex/messagebroker/amf"/>
<mx:HBox x="0" y="10" width="100%">
<mx:Label text="Name:" id="nameLabel"/>
<mx:TextInput id="inputText"/>
<mx:Button label="say Hello" id="nameButton" click="sayHello()"/>
<mx:Label id="resultLabel" text="{helloResult}"/>
</mx:HBox>
</mx:Application>
这个文件好了后,你只要保存下就可以敲入URL测试了(保存后马上就output到myflex项目中了,然后又自动同步到tomcat,前面tomcat已经启动了),我的是http://localhost:8080/myflex/flexTest.html,表单中输入名字,然后点下按钮,就跟你说hello了,是不是很兴奋了,恭喜flex你入门了。这里一定要指定endpoint,要不然与服务器的交互会失败,endpoint的/myflex根据你web项目的名称不同而不同。endpoint不要指定死,如:http://localhost:8080/myflex/messagebroker/amf,这样到了以后部署的时候是会有错误的。
后续:
根据例子配置了flex+java+BlazeDS,但是提示说有问题:
Couldn't establish a connection to 'helloworld'
查得资料http://zerozone.javaeye.com/blog/60846
出错原因是找不到destination,或者是channels的问题,做后在RemoteObject中指定endpoint,测试通过
<mx:RemoteObject id="ro" destination="helloworld" result="resultHandler(event)" endpoint="http://localhost:8080/flex/messagebroker/amf"/>
但是新的问题来了,总不能写死吧~,是不是mxml在编译的时候可以读取属性文件,然后替换endpoint的属性呢?比如在mxml中endpoint="${endpointAmf}" , 然后在属性文件中配置endpoint.amf=http://localhost:8080/flex/messagebroker/amf,这样编译的时候替换掉。
后来测试过了endpoint=“flex/messagebroker/amf” 这样也是可以的,这样可以随着服务器变迁部署而不会出现问题了
上面的东西转自别人的,在次略有修改,在次向他说声谢谢……
我的个人体验:我照着上面步骤做了一下,完了之后输入http://localhost:8080/myflex/flexTest.html报404,找不到文件,最后
<welcome-file-list>
<welcome-file>flexTest.html</welcome-file>
<welcome-file>index.htm</welcome-file>
</welcome-file-list>
加了一个欢迎页,就OK了,也没有出现后续中的那种错误。