参考:
http://www.cnblogs.com/RocD-DuPeng/articles/1751040.html
一、建立Flex与Java交互的工程。
本文中讲到的交互是利用Blazeds的,因为这个是免费的,呵呵,我是穷人。
首先就是去下载Blazeds的压缩包,这个可以从官网或者优快云、JavaEye上下到。解压缩这个包,将里面的Blazeds.war解压,后面建立工程时要使用。
在MyEclipse中建立一个web工程,名为FlexTest。(注意:这个工程的JDK一定是1.5或以上版本,本文使用6.0)
将刚才解压的Blazeds.war包中的“META-INF”与“WEB-INF”文件夹以及文件夹中的内容拷贝到工程的WebRoot下。WEB-INF中包含有Flex的配置文件以及Blazeds需要的Jar包。这时我们就可以在这个工程中写入Java代码了。本文以一个用户列表为例,建立用户实体类。代码如下:
代码
1
package
com.rocd.flex.entity;
2
3
import
java.io.Serializable;
4
5
public
class
UserBean
implements
Serializable {
6
private
String userName;
7
private
String password;
8
private
int
age;
9
private
String email;
10
11
public
String getUserName() {
12
return
userName;
13
}
14
15
public
void
setUserName(String userName) {
16
this
.userName
=
userName;
17
}
18
19
public
String getPassword() {
20
return
password;
21
}
22
23
public
void
setPassword(String password) {
24
this
.password
=
password;
25
}
26
27
public
int
getAge() {
28
return
age;
29
}
30
31
public
void
setAge(
int
age) {
32
this
.age
=
age;
33
}
34
35
public
String getEmail() {
36
return
email;
37
}
38
39
public
void
setEmail(String email) {
40
this
.email
=
email;
41
}
42
}
43
注意,由于这个实体类需要当做Java代码中方法的返回值传递给Flex中的AS代码,所以需要继承Serializable接口,否则将导致异常的发生。
然后,在建立一个供Flex调用的Java类。代码如下
代码
1
package
com.rocd.flex.biz;
2
3
import
java.util.ArrayList;
4
import
java.util.List;
5
6
import
com.rocd.flex.entity.UserBean;
7
8
public
class
UserManager {
9
public
List
<
UserBean
>
getUserList() {
10
List
<
UserBean
>
list
=
new
ArrayList
<
UserBean
>
();
11
for
(
int
i
=
0
; i
<
10
; i
++
) {
12
UserBean user
=
new
UserBean();
13
user.setUserName(
"
用户
"
+
i);
14
user.setPassword(
"
123
"
);
15
user.setAge(
20
+
i);
16
user.setEmail(
"
user
"
+
i
+
"
@aaa.com
"
);
17
list.add(user);
18
}
19
return
list;
20
}
21
}
22
这里就不连接数据库去操作了,因为本文重点放在Flex调用Java上,所以写个桩数据用以测试。
写完了这两个类,就需要在WebRoot/WEB-INF/flex/remoting-config.xml中配置用以调用这个Java类的信道了。具体代码如下:
代码
1
<?
xml version="1.0" encoding="UTF-8"
?>
2
<
service
id
="remoting-service"
3
class
="flex.messaging.services.RemotingService"
>
4
<
adapters
>
5
<
adapter-definition
id
="java-object"
6
class
="flex.messaging.services.remoting.adapters.JavaAdapter"
7
default
="true"
/>
8
</
adapters
>
9
<
default-channels
>
10
<
channel
ref
="my-amf"
/>
11
</
default-channels
>
12
<
destination
id
="UserManager"
>
13
<
properties
>
14
<
source
>
com.rocd.flex.biz.UserManager
</
source
>
15
</
properties
>
16
</
destination
>
17
</
service
>
其中destination就是信道,properties是可以配置多个Java类,source是配置要调用Java类的包路径。
到此,Java部分的代码就写完了。下面是Flex中的代码。
在Flex Builder中创建一个Flex工程。名称为FlexApp。如图所示

注意Project Location的Folder要选择MyEclipse建立的Web工程的WebRoot下。Server technology选择J2EE
点击[Next]按钮进入下一页。如图

注意Server location中Root folder要选择Java Web工程的WebRoot路径。Root URL是Java web工程的访问路径,由于使用的是Tomcat服务器,工程名为FlexTest,所以路径是http://localhost:8080/FlexTest/,而
Context root则是Java Web项目的工程名。完成后点击那个[Validate Configuration]进行验证,如果窗口上方显示如上图所示的“黄三角”就说明可以进行下一步操作了。
顺利建立完Flex工程后,需要注意是否报错,如果报错,请注意调整Flex SDK的版本。
没问题后,就要创建一个AS的类,用来接收Java程序的返回值了,也就是那个UserBean。代码如下:
代码
package
com.rocd.flex.entity { [Bindable] [RemoteClass(alias
=
"
com.rocd.flex.entity.UserBean
"
)]
public
class
UserBean {
public
var userName:String;
public
var password:String;
public
var age:
int
;
public
var email:String; } }
这里[Bindable]是可绑定的,[RemoteClass(alias="com.rocd.flex.entity.UserBean")]是和Java代码中的UserBean类关联起来。这样就可以利用类型转换来将Java对象转换为AS对象了。
现在让我们在Flex中调用这个Java代码吧。代码如下:
1
<?
xml version="1.0" encoding="utf-8"
?>
2
<
mx:Application
xmlns:mx
="http://www.adobe.com/2006/mxml"
layout
="absolute"
3
fontSize
="12"
initialize
="init()"
>
4
<
mx:Script
>
5
<![CDATA[
6
import com.rocd.flex.entity.UserBean;
7
import mx.collections.ArrayCollection;
8
import mx.rpc.events.ResultEvent;
9
10
private function init():void
11
{
12
UserManager.getUserList();
13
UserManager.addEventListener(ResultEvent.RESULT,getUserList);
14
}
15
16
private function getUserList(event:ResultEvent):void
17
{
18
var userList:ArrayCollection = ArrayCollection(event.result);
19
var userList_FlexData:ArrayCollection = new ArrayCollection();
20
for (var i:int = 0; i < userList.length; i++)
21
{
22
var user:UserBean = UserBean(userList.getItemAt(i));
23
userList_FlexData.addItem(user);
24
}
25
dataGrid.dataProvider = userList_FlexData;
26
}
27
]]>
28
</
mx:Script
>
29
<
mx:RemoteObject
id
="UserManager"
destination
="UserManager"
30
showBusyCursor
="true"
/>
31
32
<
mx:Panel
x
="32"
y
="20"
width
="399"
height
="285"
layout
="absolute"
title
="用户列表"
>
33
<
mx:DataGrid
x
="0"
y
="0"
width
="379"
height
="243"
id
="dataGrid"
>
34
<
mx:columns
>
35
<
mx:DataGridColumn
headerText
="用户名"
dataField
="userName"
/>
36
<
mx:DataGridColumn
headerText
="年龄"
dataField
="age"
/>
37
<
mx:DataGridColumn
headerText
="Email"
dataField
="email"
/>
38
</
mx:columns
>
39
</
mx:DataGrid
>
40
</
mx:Panel
>
41
</
mx:Application
>
42
启动Tomcat服务器后运行这个Flex程序,如下图所示:

我对Flex与Java交互这块还不是很熟悉,所以有什么不对的地方,或者有更简单的方式,请大家给出建议。