`
ayhome
  • 浏览: 33531 次
  • 性别: Icon_minigender_1
  • 来自: 贵阳
社区版块
存档分类
最新评论

扩展ETMVC视图支持AMF3与flex互通

    博客分类:
  • JAVA
阅读更多

      网上找了一些关于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
分享到:
评论
1 楼 kimmking 2009-11-16  
有时间的话,我准备抽出来 BlazeDS的 java的amf3编解码器,在我原来的java和.net的rpc基础上,加入flex的rpc功能。

相关推荐

    AMF.rar_FluorineFx_FluorineFx amf_amf__flex_flex amf

    FluorineFx作为AMF的.NET实现,提供了对AMF0和AMF3两种版本的支持,涵盖了Flash Player的所有版本。通过FluorineFx,开发者可以轻松地在.NET环境中创建Flex服务,实现客户端与服务器的双向通信。它支持多种.NET框架...

    AMF抓取flex页面数据

    - AMF分为两种类型:AMF0和AMF3,其中AMF3提供了更好的压缩和性能。 2. **Flex与AMF通信** - Flex应用通常通过HTTP/HTTPS与服务器通信,使用AMF协议封装数据,通过Flash Player发送到服务器。这些请求可能包括...

    flex与amf

    Flex与AMF(Action Message Format)是Web开发中的关键技术,尤其在构建富互联网应用程序(RIA)时。Flex作为Adobe开发的开源框架,主要用于创建交互式的、基于Flash的用户界面,而AMF则是一种高效的二进制数据序列...

    amf3协议解析的例子

    AMF3协议常用于服务器与客户端之间的实时数据交换,如在Flex或Flash应用中实现视频流、游戏数据或者Web服务调用。 在这个例子中,我们关注的是如何解析AMF3协议数据,并将其转换为树形结构以方便观察。这通常涉及到...

    amf3_spec_05_05_08.zip_AMF3_above flash player_player

    使用AMF3,开发者可以创建高效的服务器端服务,这些服务可以与Flash Player客户端进行无缝交互,比如在Flex应用程序中。AMF3支持的远程方法调用(RPC)使得服务器端的方法可以直接在客户端像本地函数一样调用,极大...

    AMF3 C++ 源码库码库

    8. **兼容性**:AMF3库还应考虑到与其他系统的兼容性,比如与Flash Player、Flex、ActionScript或其他支持AMF3的平台交互。 通过深入研究`src`目录下的源代码,我们可以了解到AMF3数据类型的实现细节,编码解码算法...

    AMF3 C++ 源码(修改版)

    AMF3,全称为Action Message Format 3,是Adobe公司为Flash Player和Flex应用程序之间进行数据交换设计的一种高效二进制序列化格式。这个“AMF3 C++ 源码(修改版)”提供了对AMF3协议的C++实现,支持序列化和对象化...

    amf-php flex插件

    这是一个flex的lib库,方便开发者迅速开展amf连接操作。

    AMF3协议中文版定义.pdf

    AMF3 协议中文版定义 AMF(Action Message Format,动作信息格式)是一种压缩的二进制格式,用于序列化 ActionScript 对象图。序列化后的 AMF 编码对象图可以用来持久化,并在不同的会话中获得应用的公共状态,或者...

    amf3cplusplus

    4. **兼容性**:确保与Flash Player和其他支持AMF3的系统之间数据交换的兼容性。 5. **性能优化**:可能包含针对特定CPU架构和编译器的性能优化。 在使用这个库时,开发者需要注意以下几点: 1. **类型映射**:...

    开源amf协议解析封装

    3. **Policy Server**:在Flex与服务器通信时,为了安全考虑,Flash Player会首先连接到Policy Server,获取跨域策略文件,允许数据交换。在C#项目中,"PolicyServer"可能是一个处理这个步骤的组件。 4. **Lib**:...

    thinkphp_amf

    AMF是一种二进制数据格式,常用于Adobe Flex与服务器之间的数据交换,提供了高效的数据传输能力。 【描述】"thinkphp_amf的一个简单demo" 意味着这个项目是为了演示如何在ThinkPHP框架中集成AMF协议,以便Flex...

    AMF1.0(AMP).zip

    虽然AMF1.0相比AMF0增加了对XML和XMLList的支持,但在后来的AMF3版本中,这些功能得到了更全面的优化,因此AMF1.0现在较少被使用。 在"AMF1.0(AMP).zip"这个压缩包中,我们可以推测包含的是与AMF1.0相关的源代码...

    springmvc与Flex集成示例

    1. **通信协议**:Spring MVC与Flex之间的通信通常采用AMF(Action Message Format),这是一种二进制协议,能够高效地传输数据,支持复杂的数据结构。 2. **服务暴露**:在Spring MVC中,通过配置Spring的...

    Flex3中文版API

    6. **服务和数据访问**:Flex3支持与服务器端的数据交换,通过AMF(Action Message Format)进行高效的数据序列化。它还提供了对HTTP、SOAP、RESTful服务的访问支持。 7. **图形和动画**:利用Flex3,开发者可以...

    Flex + Zend AMF + MYSQL + WAMP 新手指南

    它支持SQL标准,具有高性能、可扩展性和易用性。MySQL的使用使得开发者可以存储、管理和检索应用程序所需的数据。 4. **WAMP**: WAMP(Windows, Apache, MySQL, PHP)是一个在Windows操作系统上的软件套件,用于...

    java socket amf3 flash game framework

    聊天功能是游戏社交性的体现,通过Java Socket和AMF3编码,框架能够支持实时的文本聊天。玩家可以在游戏中发送消息,服务器接收并广播到其他在线玩家,增强玩家间的交流。 此外,"rpg"这个文件夹可能包含了框架中...

    AMF.NET 文件极小的开源AMF解析库

    AMF有多种版本,包括AMF0和AMF3,AMF.NET应该支持这两种格式,以适应不同场景的需求。AMF0是早期版本,主要应用于Flash Player 8及更早版本,而AMF3则在Flash Player 9及以后版本中广泛使用,提供了更高效的数据编码...

    AMF3 format

    - **支持更多的数据类型**:AMF3 引入了对更多数据类型的支持,包括 ByteArray 类型等。 - **更小的内存占用**:通过减少冗余信息,AMF3 使得序列化后的数据占用更少的内存空间。 - **更快的读写速度**:由于减少了...

    Flex3学习指南-是初学者学习Flex必备资料2

    13. **Flex与AIR**: Adobe AIR允许Flex应用程序在桌面环境中运行,扩大了Flex的应用范围。 14. **最佳实践和设计模式**: 掌握Flex开发的最佳实践和常见设计模式,如MVC(模型-视图-控制器)模式,有助于编写可维护...

Global site tag (gtag.js) - Google Analytics