• 电子书中Flex与Java通信方式:BlazeDs

    普通类
    • 支持
    • 批判
    • 提问
    • 解释
    • 补充
    • 删除
    • BlazeDS

    BLazeDS是Adobe提供的一种基于Java的开源解决方案,用于实现与服务器数据的交互;除此之外,还可以通过JS方式实现Java与Flex的数据交换。

    BlazeDS 是一个基于服务器的 Java 远程控制 (remoting) 和 Web 消息传递 (messaging) 技术,它能够使得后端的 Java 应用程序和运行在浏览器上的 Adobe Flex 应用程序相互通信。

    BlazeDS包含一个RPC(Remote Procedure Call )式的远程库和一个实时消息系统 。

    • BlazeDS配置

    在Java文件的WEB-INF文件夹下部署Flex文件包,文件包中包括messaging-config.xml   proxy-config.xml remoting-config.xml services-config.xml

    以上四个文件可以从BlazeDS官网下载。

    同时修改WEB-INF下的web.xml,在<error-page></error-page>后添加如下代码:

    <!--Flex start-->

      <!-- Http Flex Session attribute and binding listener support  start-->
        <listener>
            <listener-class>flex.messaging.HttpFlexSession</listener-class>
        </listener>
      <!-- Http Flex Session attribute and binding listener support  end-->
        
      <!-- MessageBroker Servlet start -->
        <servlet>
            <servlet-name>MessageBrokerServlet</servlet-name>
            <display-name>MessageBrokerServlet</display-name>
            <servlet-class>flex.messaging.MessageBrokerServlet</servlet-class>
            <init-param>
                <param-name>services.configuration.file</param-name>
                <param-value>/WEB-INF/flex/services-config.xml</param-value>
           </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
     
        <servlet-mapping>
            <servlet-name>MessageBrokerServlet</servlet-name>
            <url-pattern>/messagebroker/*</url-pattern>
        </servlet-mapping>
    <!-- MessageBroker Servlet end-->
    <!--Flex end-->
     
    完成该操作后需要修改remoting-config.xml
    例如,增加Ebook.java文件的远程访问方式,代码如下:
    <destination id="ko">
    <properties>
    <source>hep.webapp.struts.actions.template.Ebook</source>
    </properties>
    </destination>
    在Flex端mxml文件中配置:
    <fx:Declarations>
    <s:RemoteObject id="book" destination="ko"/>
    <mx:DateFormatter id="dateFormatter" formatString="YYYY-MM-DD"/>
    </fx:Declarations>
    在<fx:Script>
    <![CDATA[
    ]]>
    </fx:Script>
    中通过异步令牌方式获取:
    private var responder:mx.rpc.Responder=new mx.rpc.Responder(result,fault);
    private var listResponder:mx.rpc.Responder = new mx.rpc.Responder(listResult,fault);
    private function init():void {
               koId = FlexGlobals.topLevelApplication.parameters.koId;
               var token:AsyncToken=book.getKo(koId);//通过异步令牌获取java中方法返回值ko
               token.addResponder(responder);
    }
    public function result(data:Object):void{
               ko = data.result;//读取到ko
    }
     
    public function fault(info:Object):void{
               Alert.show(info.fault.toString());
    }
     
    其中book.getKo(koId)的getKo(koId)方法则是Ebook.java中的方法,返回值为ko
    • 映射java和ActionScript中的类

    java中的类:

     

    package com.uisk.hep.bo.lc;
     
    import java.sql.Timestamp;
     
    import com.uisk.hep.bo.HepBaseObject;
    import com.uisk.hep.bo.User;
     
    public class KnowledgeObject extends HepBaseObject {
    private Long createdLcId;
    private String title;
    private String description;
    private Timestamp createTime;
    private String uri;
    private Long knowledgetypeId;
    //0代表是内容学习元1代表附件学习元
    private Long type;
    private Long peoplenum=new Long("0");
    private Float totalscore= 0.0f;;
    private User user;
    private String filepath;
    private Float averscore= 0.0f;
    private Long learningTime;
    private Integer licenseid;
    private String rights;
    private String label;
    private String audienceIds;
    private String learninggoal;
    private String disciplineIds;
    private Integer score;
    private String image;
    private String themeIds;// 主题ids
    private Integer passed;
    private int top; // 0不推荐,1推荐,置顶设置
    private Float evolForce;
    private long totalView;
    private Timestamp recommendTime;
    private Float trustValue;
    private String open;
    ...
     
    }
     

    Flex中对应的类:

    package eBook.model

    {
    import flashx.textLayout.formats.Float;
     
    [Bindable]
    [RemoteClass(alias="com.uisk.hep.bo.lc.KnowledgeObject")]
    public class KnowledgeObject
    {
    public var id:int;
    public var title:String;
    public var createTime:Date;
    public var description:String;
    public var learninggoal:String;
    public var label:String;
    public var learningTime:Number;
    public var user:User;
    public var image:String;
     
    public function KnowledgeObject()
    {
    }
     
    }
    }
     
    没有必要将java中类的所有属性都映射过来,需要哪些映射哪些就可以,但是一定要在flex中对应的as文件上加上;同时也要注意需要在Java中将新属性组成的对象重新包装。
    [Bindable]
    [RemoteClass(alias="com.uisk.hep.bo.lc.KnowledgeObject")]
     
    • 标签:
    • private
    • java
    • 文件
    • string
    • public
    • flex
    • var
    • 电子书
  • 加入的知识群:
    学习元评论 (0条)

    评论为空
    聪明如你,不妨在这 发表你的看法与心得 ~



    登录之后可以发表学习元评论
      
暂无内容~~
顶部