Flex 跟后台连接 一

 

 

 

 

 

 

一、建立FlexJava交互的工程。

 

  本文中讲到的交互是利用Blazeds的,因为这个是免费的,呵呵,我是穷人。

 

  首先就是去下载Blazeds的压缩包,这个可以从官网或者CSDNJavaEye上下到。解压缩这个包,将里面的Blazeds.war解压,后面建立工程时要使用。

 

  在MyEclipse中建立一个web工程,名为FlexTest。(注意:这个工程的JDK一定是1.5或以上版本,本文使用6.0

 

  将刚才解压的Blazeds.war包中的“META-INF”“WEB-INF”文件夹以及文件夹中的内容拷贝到工程的WebRoot下。WEB-INF中包含有Flex的配置文件以及Blazeds需要的Jar包。这时我们就可以在这个工程中写入Java代码了。本文以一个ROLES为例,建立Roles实体类。代码如下:

 

package org.entity;

 

publicclass Camerabasic implements java.io.Serializable {

 

    private String id;

 

    private String cameraid;

 

    private String name;

 

    private String brand;

 

    private String model;

 

    private String cameratype;

 

    private String factory;

 

    private String contactphonenum;

 

    private String focallength;

 

    private String codingstyle;

 

    private String installationaddr;

 

    private String installer;

 

    private String cadurl;

 

    private String controldistance;

 

    private String fov;

 

    get  set方法省略】

 

}

 

注意,由于这个实体类需要当做Java代码中方法的返回值传递给Flex中的AS代码,所以需要继承Serializable接口,否则将导致异常的发生。

 

  然后,在建立一个供Flex调用的Java类。代码如下

 

dao service省略。。。

 

在改例子中,使用的框架式spring+hibernate,写一个普通类供Flex调用的java类,如下:

 

 

 

package org.action.query;

 

 

 

import java.util.List;

 

import org.entity.Camerabasic;

 

import org.service.query.CameraService;

 

import org.springframework.context.ApplicationContext;

 

import org.springframework.context.support.ClassPathXmlApplicationContext;

 

 

 

publicclass CameAction{

 

 

 

    private CameraService cService;

 

    public CameraService getcService() {

 

       returncService;

 

    }

 

    publicvoid setcService(CameraService cService) {

 

       this.cService = cService;

 

    }

 

   

 

    public List<Camerabasic> getdataMe(){

 

       try {

 

           ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"applicationContext.xml"}); 

 

           cService = (CameraService) context.getBean("cService");

 

       } catch (Exception e) {

 

           e.printStackTrace();

 

       }

 

       returncService.getAll();

 

    }

 

}

 

这里就不连接数据库去操作了,因为本文重点放在Flex调用Java上,所以写个桩数据用以测试。

 

写完了这两个类,就需要在WebRoot/WEB-INF/flex/remoting-config.xml中配置用以调用这个Java类的信道了。具体代码如下:红色的为重点

 

<?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就是信道,properties是可以配置多个Java类,source是配置要调用Java类的包路径。 -->

 

    <destination id="came">

 

        <properties>

 

             <source>org.action.query.CameAction</source>

 

         </properties>

 

     </destination>

 

</service>

 

到此,Java部分的代码就写完了。下面是Flex中的代码。

 

  在Flex Builder中创建一个Flex工程。名称为FlexApp。如图所示

 

  在Flex Builder中创建一个Flex工程。名称为FlexApp。如图所示

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

  注意Server locationRoot folder要选择Java Web工程的WebRoot路径。Root URLJava web工程的访问路径,由于使用的是Tomcat服务器,工程名为FlexTest,所以路径是http://localhost:8080/FlexTest/,而
Context root
则是Java Web项目的工程名。完成后点击那个[Validate Configuration]进行验证,如果窗口上方显示如上图所示的黄三角就说明可以进行下一步操作了。

 

  顺利建立完Flex工程后,需要注意是否报错,如果报错,请注意调整Flex SDK的版本。

 

  没问题后,就要创建一个AS的类,用来接收Java程序的返回值了,也就是那个CameEntity。代码如下:

 

package com.controller

 

{

 

 

 

   [Bindable]

 

   [RemoteClass(alias="org.entity.Camerabasic")]

 

   publicclass CameEntity

 

   {

 

      publicvar id:String;

 

      publicvar cameraid:String;

 

      publicvar name:String;

 

      publicvar brand:String;

 

      publicvar model:String;

 

      publicvar cameratype:String;

 

      publicvar factory:String;

 

      publicvar contactphonenum:String;

 

      publicvar focallength:String;

 

      publicvar codingstyle:String;

 

      publicvar installationaddr:String;

 

      publicvar installer:String;

 

      publicvar cadurl:String;

 

      publicvar controldistance:String;

 

      publicvar fov:String;

 

     

 

       

 

      publicfunction CameEntity()

 

      {

 

      }

 

   }

 

}

 

这里[Bindable]是可绑定的[RemoteClass(alias="org.entity.Camerabasic")]是和Java代码中的Camerabasic类关联起来。这样就可以利用类型转换来将Java对象转换为AS对象了。

 

  现在让我们在Flex中调用这个Java代码吧。代码如下:青色标注为重点

 

<?xml version="1.0" encoding="utf-8"?>

 

<s:VGroup xmlns:fx="http://ns.adobe.com/mxml/2009"

 

        xmlns:s="library://ns.adobe.com/flex/spark"

 

        xmlns:mx="library://ns.adobe.com/flex/mx"

 

        xmlns:iframe="com.view.iframe.*"

 

        xmlns:sgclass="com.common.globe.sgclass.*"

 

        width="100%" height="100%" gap="0" creationComplete="init()">

 

   creationComplete为该组件创建完成后调用的方法】

 

   <fx:Declarations>

 

      <!-- 将非可视元素(例如服务、值对象)放在此处 -->

 

      <s:RemoteObject id="getdataRe" destination="came">

 

         <s:method name="getdataMe" result="getlist(event)">

 

          

 

        </s:method>

 

      </s:RemoteObject>

 

RemoteObjectid为唯一标识,destination的值需要和javaremoting-config.xml中的destination中的id一致;s:method中的name值需要和java中的普通类中需要调用的方法名一致,result为回调函数,创建回调函数在此写逻辑方法,即在as中写】

 

</fx:Declarations>

 

   <fx:Script>

 

      <![CDATA[

 

     

 

      import com.controller.CameEntity;

 

     

 

      import mx.collections.ArrayCollection;

 

      import mx.containers.Form;

 

      import mx.controls.Alert;

 

      import mx.rpc.events.ResultEvent;

 

      privatefunction init():void{

 

         getdataRe.getdataMe();

 

【在此init()方法中,创建组件完成调用的方法,调用的方式为RemoteObjectid为唯一标识 s:method中的name值,即可完成调用java后台的,返回数据,给result调用函数。】

 

      }

 

     

 

      privatefunction getlist(event:ResultEvent):void{

 

        dataGrid.dataProvider = event.result as ArrayCollection;

 

      }

 

【写该回调函数方法,ResultEvent得到调用java后台返回的数据,将返回的数据转换类型给dataGrid组件的id值。】

 

     

 

     

 

      ]]>

 

   </fx:Script>

 

   <s:Group width="100%" height="60">

 

      <mx:Canvas x="0" y="120" width="100%" height="388">

 

           <s:Label x="5" y="1" height="26" fontSize="18" text="查询结果"/>

 

           <mx:DataGrid x="3" y="23" width="269" height="365" id="dataGrid">

 

              <mx:columns>

 

                 <mx:DataGridColumn dataField="name" headerText="建筑名"/>

 

              </mx:columns>

 

           </mx:DataGrid>

 

          

 

        </mx:Canvas>

 

      </s:Group>

 

</s:VGroup>

 

 

 

有不理解的可以找我:QQ:2734469636

                                    邮箱:qinfen912161695@163.com

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值