1、通过HTTPService:你访问一个XML或者Servlet,然后Flex接收返回的XML数据。
2、通过WebService:你访问一个WebService服务,然后获得文本信息。
3、通过RemoteObject:可以通过BlazeDs来访问远程Service接口方法,Flex接收一个对象。
这里我只是研究了一下第三种方式,因为JAVA后台已经把数据封装到了一个对象里面,这样就服务端的程序可以不用动,只管把服务端传过来的这个对象转换成AS对象,然后解析处理里面的数据并展示到Flex前端即可。
这里需要对RemoteObject做一下简单的介绍,首先我们需要在服务端的remote- config.xml配置上。
<?xml version="1.0" encoding="UTF-8"?>
<service id="remoting-service" class="flex.messaging.services.RemotingService">
<adapters>
<adapter-definition id="java-object" class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true"/>
</adapters>
<default-channels>
<channel ref="my-amf"/>
</default-channels>
<destination id="UserManager">
<properties>
<source>com.rocd.flex.biz.UserManager</source>
</properties>
</destination>
</service>
下面开始动手实践一下
package com.rocd.flex.entity;
import java.io.Serializable;
public class UserBean implements Serializable {
private String userName;
private String password;
private int age;
private String email;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
注意:由于这个实体类需要当做Java代码中方法的返回值传递给Flex中的AS代码,所以需要继承Serializable接口,否则将导致异常的发生。
package com.rocd.flex.biz;
import java.util.ArrayList;
import java.util.List;
import com.rocd.flex.entity.UserBean;
public class UserManager {
public List<UserBean> getUserList() {
List<UserBean> list = new ArrayList<UserBean>();
for (int i = 0; i < 10; i++) {
UserBean user = new UserBean();
user.setUserName("用户" + i);
user.setPassword("123");
user.setAge(20 + i);
user.setEmail("user" + i + "@aaa.com");
list.add(user);
}
return list;
}
}
这里就不连接数据库去操作了,我们把重点放在Flex调用Java上,所以写个死数据用以测试。
到此,Java部分的代码就写完了。下面是Flex中的代码。
点击[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的版本。
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;
}
}
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
fontSize="12" initialize="init()">
<mx:Script>
<![CDATA[
import com.rocd.flex.entity.UserBean;
import mx.collections.ArrayCollection;
import mx.rpc.events.ResultEvent;
private function init():void
{
UserManager.getUserList();
UserManager.addEventListener(ResultEvent.RESULT,getUserList);
}
private function getUserList(event:ResultEvent):void
{
var userList:ArrayCollection = ArrayCollection(event.result);
var userList_FlexData:ArrayCollection = new ArrayCollection();
for (var i:int = 0; i < userList.length; i++)
{
var user:UserBean = UserBean(userList.getItemAt(i));
userList_FlexData.addItem(user);
}
dataGrid.dataProvider = userList_FlexData;
}
]]>
</mx:Script>
<mx:RemoteObject id="UserManager" destination="UserManager"
showBusyCursor="true" />
<mx:Panel x="32" y="20" width="399" height="285" layout="absolute" title="用户列表">
<mx:DataGrid x="0" y="0" width="379" height="243" id="dataGrid">
<mx:columns>
<mx:DataGridColumn headerText="用户名" dataField="userName"/>
<mx:DataGridColumn headerText="密码" dataField="password"/>
<mx:DataGridColumn headerText="年龄" dataField="age"/>
<mx:DataGridColumn headerText="邮件" dataField="email"/>
</mx:columns>
</mx:DataGrid>
</mx:Panel>
</mx:Application>