zoukankan      html  css  js  c++  java
  • Flex使用Blazeds与Java交互及自定义对象转换详解-DATAGRID读取ORACLE数据

    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程序,如下图所示:

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

     
  • 相关阅读:
    JS实现日期选择
    php获取ip地址
    CentOS下将php和mysql命令加入到环境变量中简单
    java第二次作业
    新学期新计划
    java第三次作业
    java第四次作业
    申请到博客的第一时间
    Java基础之JDK
    Java中的数据类型
  • 原文地址:https://www.cnblogs.com/zhugexiaobei/p/4460161.html
Copyright © 2011-2022 走看看