-
电子书中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中方法返回值kotoken.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;// 主题idsprivate 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条)
聪明如你,不妨在这 发表你的看法与心得 ~