网上找了一些关于flex与java互通的文章,貌似都很老的,并且不适合我个人使用,主要是配置太繁琐(基于AMF3),不过也还是找到一些资料自己加以实践 修改还是搞出点东西来了.
本文实例中,客户端读取远程数据本地生成导航栏及下拉菜单.
etmvc
1 下载 flex-messaging-common.jar 和 flex-messaging-core.jar加入到path中
2 扩展etmvc的视图以支持AMF3(关于 etmvc的视图 http://www.etmvc.cn/tutorial/show/15)
AMF3View.java
/* ***********************************************
* author : Anyhome
* email : ayhome@gmail.com
* function:
* @date 2009-10-30
* history: created by Anyhome
* ***********************************************/
package org.anyhome;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.et.mvc.View;
import com.et.mvc.ViewRendererClass;
@ViewRendererClass(AMF3ViewRenderer.class)
public class AMF3View extends View {
private Object amf3pojo;
public AMF3View(Object amf3pojo){
//this.amf3pojo = PojoToMap(amf3pojo);
this.amf3pojo = amf3pojo;
}
/**
* @param amf3pojo the amf3pojo to set
*/
public void setAmf3pojo(Object amf3pojo) {
this.amf3pojo = amf3pojo;
}
/**
* @return the amf3pojo
*/
public Object getAmf3pojo() {
return amf3pojo;
}
}
AMF3ViewRenderer.java
/* ***********************************************
* author : Anyhome
* email : ayhome@gmail.com
* function:
* @date 2009-10-30
* history: created by Anyhome
* ***********************************************/
package org.anyhome;
import java.io.DataOutputStream;
import java.io.PrintWriter;
import java.util.zip.DeflaterOutputStream;
import com.et.mvc.ViewContext;
import com.et.mvc.renderer.AbstractViewRenderer;
import flex.messaging.io.SerializationContext;
import flex.messaging.io.amf.Amf3Output;
public class AMF3ViewRenderer extends AbstractViewRenderer<AMF3View> {
@Override
protected void renderView(AMF3View viewObject, ViewContext viewContext)
throws Exception {
SerializationContext context = new SerializationContext();
Amf3Output out = new Amf3Output(context);
DeflaterOutputStream stream = new DeflaterOutputStream(new DataOutputStream(viewContext.getResponse().getOutputStream()));
out.setOutputStream(stream);
out.writeObject(viewObject.getAmf3pojo());
stream.finish();
}
}
3 写一个POJO转MAP的方法
public AMF3View List(int id) throws ActiveRecordException{
List<MyModule> myModule = MyModule.findAll(MyModule.class,"M_ParentID=?",
new Object[]{id});
List<Map> lst = new ArrayList<Map>();
for(MyModule items:myModule)
{
lst.add(PojoToMap(items));
}
return new AMF3View(lst);
}
4 调用
public AMF3View List(int id) throws ActiveRecordException{
List<MyModule> myModule = MyModule.findAll(MyModule.class,"M_ParentID=?",
new Object[]{id});
List<Map> lst = new ArrayList<Map>();
for(MyModule items:myModule)
{
lst.add(PojoToMap(items));
}
return new AMF3View(lst);
}
flex
public function GetModGroupLst():void{
var myRequest:URLRequest = new URLRequest( org.System.ProxyHost + "Aysuite2/AppManager/Module/List/0");
var myLoader:URLLoader = new URLLoader();
myLoader.addEventListener(Event.COMPLETE, loadSuccessful);
myLoader.addEventListener(IOErrorEvent.IO_ERROR, loadError);
myLoader.load(myRequest);
myLoader.dataFormat=URLLoaderDataFormat.BINARY;
}
private function loadSuccessful(e:Event):void
{
var byte:ByteArray = e.target.data as ByteArray;
byte.uncompress();
var obj:Object = byte.readObject();
for(var a:Object in obj){
var but:AButton = new AButton();
but.label=obj[a].getM_CName;
but.id=obj[a].getModuleID;
but.name=obj[a].getM_Directory;
//getM_Directory 对于我的 POJO中的 getM_Directory
but.addEventListener(MouseEvent.CLICK,flipTonav);
bottomlayout.addChild(but);
}
}
private function loadError(e:IOErrorEvent):void {
Alert.show("网络错误");
}
- 大小: 43.3 KB
分享到:
- 2009-11-16 17:38
- 浏览 874
- 评论(1)
- 论坛回复 / 浏览 (1 / 1665)
- 查看更多
相关推荐
FluorineFx作为AMF的.NET实现,提供了对AMF0和AMF3两种版本的支持,涵盖了Flash Player的所有版本。通过FluorineFx,开发者可以轻松地在.NET环境中创建Flex服务,实现客户端与服务器的双向通信。它支持多种.NET框架...
- AMF分为两种类型:AMF0和AMF3,其中AMF3提供了更好的压缩和性能。 2. **Flex与AMF通信** - Flex应用通常通过HTTP/HTTPS与服务器通信,使用AMF协议封装数据,通过Flash Player发送到服务器。这些请求可能包括...
Flex与AMF(Action Message Format)是Web开发中的关键技术,尤其在构建富互联网应用程序(RIA)时。Flex作为Adobe开发的开源框架,主要用于创建交互式的、基于Flash的用户界面,而AMF则是一种高效的二进制数据序列...
AMF3协议常用于服务器与客户端之间的实时数据交换,如在Flex或Flash应用中实现视频流、游戏数据或者Web服务调用。 在这个例子中,我们关注的是如何解析AMF3协议数据,并将其转换为树形结构以方便观察。这通常涉及到...
使用AMF3,开发者可以创建高效的服务器端服务,这些服务可以与Flash Player客户端进行无缝交互,比如在Flex应用程序中。AMF3支持的远程方法调用(RPC)使得服务器端的方法可以直接在客户端像本地函数一样调用,极大...
8. **兼容性**:AMF3库还应考虑到与其他系统的兼容性,比如与Flash Player、Flex、ActionScript或其他支持AMF3的平台交互。 通过深入研究`src`目录下的源代码,我们可以了解到AMF3数据类型的实现细节,编码解码算法...
AMF3,全称为Action Message Format 3,是Adobe公司为Flash Player和Flex应用程序之间进行数据交换设计的一种高效二进制序列化格式。这个“AMF3 C++ 源码(修改版)”提供了对AMF3协议的C++实现,支持序列化和对象化...
这是一个flex的lib库,方便开发者迅速开展amf连接操作。
AMF3 协议中文版定义 AMF(Action Message Format,动作信息格式)是一种压缩的二进制格式,用于序列化 ActionScript 对象图。序列化后的 AMF 编码对象图可以用来持久化,并在不同的会话中获得应用的公共状态,或者...
4. **兼容性**:确保与Flash Player和其他支持AMF3的系统之间数据交换的兼容性。 5. **性能优化**:可能包含针对特定CPU架构和编译器的性能优化。 在使用这个库时,开发者需要注意以下几点: 1. **类型映射**:...
3. **Policy Server**:在Flex与服务器通信时,为了安全考虑,Flash Player会首先连接到Policy Server,获取跨域策略文件,允许数据交换。在C#项目中,"PolicyServer"可能是一个处理这个步骤的组件。 4. **Lib**:...
AMF是一种二进制数据格式,常用于Adobe Flex与服务器之间的数据交换,提供了高效的数据传输能力。 【描述】"thinkphp_amf的一个简单demo" 意味着这个项目是为了演示如何在ThinkPHP框架中集成AMF协议,以便Flex...
虽然AMF1.0相比AMF0增加了对XML和XMLList的支持,但在后来的AMF3版本中,这些功能得到了更全面的优化,因此AMF1.0现在较少被使用。 在"AMF1.0(AMP).zip"这个压缩包中,我们可以推测包含的是与AMF1.0相关的源代码...
1. **通信协议**:Spring MVC与Flex之间的通信通常采用AMF(Action Message Format),这是一种二进制协议,能够高效地传输数据,支持复杂的数据结构。 2. **服务暴露**:在Spring MVC中,通过配置Spring的...
6. **服务和数据访问**:Flex3支持与服务器端的数据交换,通过AMF(Action Message Format)进行高效的数据序列化。它还提供了对HTTP、SOAP、RESTful服务的访问支持。 7. **图形和动画**:利用Flex3,开发者可以...
它支持SQL标准,具有高性能、可扩展性和易用性。MySQL的使用使得开发者可以存储、管理和检索应用程序所需的数据。 4. **WAMP**: WAMP(Windows, Apache, MySQL, PHP)是一个在Windows操作系统上的软件套件,用于...
聊天功能是游戏社交性的体现,通过Java Socket和AMF3编码,框架能够支持实时的文本聊天。玩家可以在游戏中发送消息,服务器接收并广播到其他在线玩家,增强玩家间的交流。 此外,"rpg"这个文件夹可能包含了框架中...
AMF有多种版本,包括AMF0和AMF3,AMF.NET应该支持这两种格式,以适应不同场景的需求。AMF0是早期版本,主要应用于Flash Player 8及更早版本,而AMF3则在Flash Player 9及以后版本中广泛使用,提供了更高效的数据编码...
- **支持更多的数据类型**:AMF3 引入了对更多数据类型的支持,包括 ByteArray 类型等。 - **更小的内存占用**:通过减少冗余信息,AMF3 使得序列化后的数据占用更少的内存空间。 - **更快的读写速度**:由于减少了...
13. **Flex与AIR**: Adobe AIR允许Flex应用程序在桌面环境中运行,扩大了Flex的应用范围。 14. **最佳实践和设计模式**: 掌握Flex开发的最佳实践和常见设计模式,如MVC(模型-视图-控制器)模式,有助于编写可维护...