转于 http://www.cnblogs.com/RocD-DuPeng/articles/1751040.html
一、建立Flex与Java交互的工程。
本文中讲到的交互是利用Blazeds的,因为这个是免费的,呵呵,我是穷人。
首先就是去下载Blazeds的压缩包,这个可以从官网或者CSDN、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程序,如下图所示: