`
Saito
  • 浏览: 43810 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Mate + BlazeDs ...

阅读更多
对不起. 我也开始务实了.


    对Mate还没有了解的童鞋可以先去这里了解下..=>Mate<=


    对blazeDs还没有了解的童鞋可以先去这里了解下..=>blazeDs<=



    之前我总结了一下Mate + blazeDs我们走完整个框架流程应该有的步骤:


    views=>eventMap=>eventHandler=>remoteInvoker=>services=>remoting-config.xml=>class


    我们在blazeDs端要做的事情只有从remoting-config.xml开始.. class就是我们要调用的 ..


    之前的那么多步骤都是在Mate中完成.


    话说当我自己画完这个流程的时候我也在想. 这样是不是值得.. 或许我沾染上了Java的恶习..


    为了让大家更加清晰地了解整个调用过程. 我分别使用的Mate 跟 blazeDs 的Helloworld 然后将他们组合..


    我们先从blazeDs说起.

   
package com.taobao.designcenter;

/**
 *
 * @author Saito
 */
public class HelloWorld {

    public HelloWorld() {
    }

    public String getHelloWorld() {
        return "Hello World!";
    }
}


    写完了这个class . 将编译过后的 .class文件扔到类似如下的目录下 ..
    D:\Apache Software Foundation\Tomcat 6.0\webapps\blazeds\WEB-INF\classes 注意你的包名 .. 是什么包从包开始copy到目录下就ok .

    写完了我们只要在下面地址寻找remoting-config.xml文件.在Service里面增加如下一段
    D:\Apache Software Foundation\Tomcat 6.0\webapps\blazeds\WEB-INF\flex
   
   
<destination id="helloWorld">
		<properties>
			<source>com.taobao.designcenter.HelloWorld</source>
		</properties>
	</destination>


    然后启动Tomcat就ok了..

    现在编写客户端Mate部分.. Mate一般来说划分包的结构为. views maps events由于我们要调用blazeDs的东西.所以增加一个services.

    顾名思义 views是view . maps是一个events映射. events就是event .services描述service .  囧rz ...

    既然是跟blazeDs交互. 那就先从services开始吧.新建一个Service.mxml.

   
<?xml version="1.0" encoding="utf-8"?>
<mx:Object	xmlns="http://mate.asfusion.com/" xmlns:mx="http://www.adobe.com/2006/mxml">
	 
	<mx:RemoteObject id="helloService" destination="helloWorld"
					 source="com.taobao.designcenter.HelloWorld"/>
	
</mx:Object>

    destination是供eventHandler调用的. source就是你的blazeDs下的class的位置.

    接下来在maps里面新建一个 EventMaps.mxml
   
<?xml version="1.0" encoding="utf-8"?>
<EventMap xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="http://mate.asfusion.com/">
	<mx:Script>
		<![CDATA[
			import com.taobao.designcenter.events.MessageEvent;
		]]>
	</mx:Script>
	<EventHandlers type="{MessageEvent.GET}">
		<RemoteObjectInvoker 
			source="com.taobao.designcenter.HelloWorld" destination="helloWorld" 
			method="getHelloWorld">
			<resultHandlers>
				<CallBack method="handleResult" arguments="{resultObject}"/>
			</resultHandlers>
		</RemoteObjectInvoker>
	</EventHandlers>
	
</EventMap>

    EventHandlers type就是事件类型. 什么事件类型由我这个Handler处理.下面我们来给出这个事件的代码.
    RemoteObjectInvoker source destination跟上面对应. method就是我们的method .如果我们有参数  可以加 arguments这个属性.
    resultHandlers CallBack就是回来call谁? . method是我们自己的处理方法..以及参数.看清楚. 参数是我们的blazeDs端得返回值..这个很强大..

    事件的定义在这边.. events 里面新建MessageEvent.as
   
package com.taobao.designcenter.events
{
	import flash.events.Event;
	
	public class MessageEvent extends Event
	{
		public static const GET:String = "getMessage";
		public var name:String;
		
		public function MessageEvent(type:String, bubbles:Boolean=true, cancelable:Boolean=false)
		{
			super(type, bubbles, cancelable);
		}
	}
}


    这边bubbles就是 是不是可以上溢.. 另一个是否可取消. 这边的事件定义就在上面调用.

    我们现在还缺少handleResult  以及views ..

    我们来创建一个views . 在views下面创建一个 MessagePanel.mxml

   
<?xml version="1.0" encoding="utf-8"?>
<mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml" 
		xmlns:mate="http://mate.asfusion.com/"
		title="Message directly from event response" 
		resizeEffect="Resize"  
		horizontalScrollPolicy="off" 
		verticalScrollPolicy="off">

	<mx:Script>
		<![CDATA[
			import com.taobao.designcenter.events.MessageEvent;
			
			public function handleResult(text:String):void
			{
				currentState='response'; 
				display.text = text;
			}
			
			private function submitForm():void 
			{
				var event:MessageEvent = new MessageEvent(MessageEvent.GET, true);
				event.name = inputName.text;
				dispatchEvent(event);
			}
		]]>
	</mx:Script>
	
	<mx:HBox>
		<mx:Label text="Write your name:"/>

		<mx:TextInput id="inputName" enter="submitForm()"/>

		<mx:Button label="GO" click="submitForm()"/>
	</mx:HBox>

		<mx:states>
			<mx:State name="response">
				<mx:AddChild position="lastChild">
					<!-- We get the message text directly from the server response by 
					using the response attribute in the Dispatcher's ResponseListener -->			
					<mx:Text id="display" styleName="message" />
				</mx:AddChild>
			</mx:State>
		</mx:states>
</mx:Panel>

    关于界面的部分就不浪费时间了. 我们主要看event处理. 我们在Button处产生了一个MessageEvent ... 然后dispatchEvent了.  之后就会被我们的Handler捕获..  然后调用我们之前的resultHandlers .. 这个handler就写在我们上面这里handleResult  然后我们的逻辑就全部完成了..

    总结一下.  button产生了一个MessageEvent..然后这个Event被捕获. 捕获完成后被处理. 处理过程中拿到了blazeDs中的提供服务的值.. 然后返回了结果. 我们把这个结果传递给了handler.. handler为我们在界面上做出响应.. so ... . ..

    ok .. 最后再Application里面显示我们的结果..

   
 <?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
				xmlns:view="com.taobao.designcenter.views.*" 
				xmlns:maps="com.taobao.designcenter.maps.*"
				layout="vertical" >

	<maps:EventMaps />
	
	<mx:HBox>
		<view:MessagePanel />
	</mx:HBox>
	
</mx:Application>

    多余话我就不说了. 你还是享受这繁复过程后的兴奋结果吧..

    再来看下整个Mate + blazeDs的过程...


    views=>eventMap=>eventHandler=>remoteInvoker=>services=>remoting-config.xml=>class

    ok .. 在这里推荐几个教程. 我的东西也参考自下面的内容 .大家可以去围观一下..

   
    Mate HelloWorld with amfphp
    用一个HelloWorld例子手把手教会你使用BlazeDS

    god bless you ...
分享到:
评论
3 楼 wjpiao 2010-01-06  
多谢楼主的回复,问题已经解决,mate的工作原理稍微了解一点儿,mate里面的sample的结构里面似乎没有services这个文件夹,其实没有楼主所用的service也可以通过,那个service楼主似乎是为了便于管理另外生成一个services文件夹,把service放到里面管理,但是在EventMpas里面直接引用的是source="com.taobao.designcenter.HelloWorld"这个类,而不是service,这里好像可以引用service的吧,这样也许更便于管理,不知道对不对!
2 楼 Saito 2010-01-05  
EventMaps.mxml 里面有 RemoteObjectInvoker这个东西的..

当你发起一个MessageEvent.GET的时候. 就会call Remote Class 的 method.. 对于这个示例来说就是 call helloWorld 的 getHelloWorld()方法. 然后返回的结果交给handleResult这个actionscript的function .. 其实也就是MessageEvent.GET这个事件讲前后串了起来..

EventMaps.xml其实是Mate这个框架的灵魂所在.. Mate主要就提供了事件处理 跟 依赖注入这两大特性..

不过还是推荐你去Mate的官方网站的forum里面看看他们的讨论.. 里面有Mate所适合与不适合领域的讨论.
1 楼 wjpiao 2010-01-04  
请教一下,,services的作用是什么??似乎没有任何页面引用services里面的object,,似乎没有任何作用额,,,但是没有它还出错,能解释一下吗?谢谢,,


[RPC Fault faultString="Send failed" faultCode="Client.Error.MessageSend" faultDetail="Channel.Connect.Failed error NetConnection.Call.Failed: HTTP: Failed: url: 'http://localhost:8080/HelloMateBlazeDS/messagebroker/amf'"]

相关推荐

    笔记4马鉴.docx

    5. **BlazeDS**:BlazeDS是Flex的数据服务组件,主要用于提供AMF(Action Message Format)数据传输,它在Flex与服务器之间的数据交互中起着关键作用。 关于Flex项目的编译速度,马鉴建议在开发过程中使用Flex SDK...

    Flex 开发架构

    - 使用BlazeDS作为AMF协议的实现,实现前后端的数据交换。 3. **配置文件与Java代码示例** - **remote-config.xml**:配置了RemotingService服务,定义了与后端通信的通道以及目的地。 ```xml ...

    Enterprise Development with Flex

    Choose among several frameworks to build Flex applications, including Cairngorm, PureMVC, Mate, and Clear Toolkit Apply selected design patterns with Flex Learn how to extend the Flex framework and ...

    flex+spring 工程

    4. **库文件**:描述中提到的"必备的lib"可能包含Flex SDK的库,Spring BlazeDS库(用于Flex和Spring之间的通信),以及其他第三方库,如 Parsley 或 Mate(用于依赖注入和事件驱动架构在Flex中的实现)。...

    flex包用于开发

    其中,最重要的是 Cairngorm、Mate、Parsley 等设计模式,它们有助于实现MVVM(Model-View-ViewModel)、MVC(Model-View-Controller)等架构。 7. ** BlazeDS / LiveCycle Data Services**:这些是服务器端技术,...

    Flex中文帮助-1

    - ** Cairngorm、PureMVC、Swiz、Mate**:这些是流行于Flex社区的MVC框架,用于简化大型Flex项目的结构和管理。 6. **Flex与Java的协作模式** - **Remoting**:通过BlazeDS/LCDS实现实时的远程方法调用,Flex...

    一个用Flex做的项目 (功能非常强大!)

    10. Flex框架:Flex还包含了一些可扩展的框架,如 Cairngorm、BlazeDS 和 Mate 等,它们提供了一种组织代码结构和管理应用程序状态的方式,便于开发大型复杂项目。 在压缩包文件“FlexApplaction”中,可能包含了源...

    Flex实例,form表单

    在本文中,我们将深入探讨如何使用Adobe Flex Builder创建一个功能完备...在实际开发中,你还可以结合其他技术,如BlazeDS进行服务器通信,或者使用 Cairngorm 或 Mate 模式进行应用架构,提升应用的可维护性和扩展性。

    FLEX资料集合 FLEX资料集合

    8. ** BlazeDS和LiveCycle Data Services (LCDS)**:Adobe提供的服务器端技术,用于Flex应用与后端服务器的数据通信,支持AMF(Action Message Format)高效数据传输。 9. **Adobe AIR**:Flex还可以开发桌面应用,...

    flex电子教案ppt

    7. ** BlazeDS 和 LiveCycle Data Services**:这些是Flex的数据服务,允许Flex应用与服务器端进行双向通信,支持AMF(Action Message Format)数据传输,提供数据推送和实时数据同步。 8. **移动开发**:随着Adobe...

    Flex中文API

    10. **Flex框架**:除了基本组件,Flex还包含一系列高级框架,如 Cairngorm、PureMVC、Mate等,它们提供了一种组织代码结构的方式,帮助开发者实现模块化和可复用的设计。 Flex中文API文档是学习和使用Flex的关键...

    FLEX MVC框架指南与应用示例

    在Flex中,通常使用ActionScript类来实现模型,并且可以利用 Cairngorm、Swiz 或 Mate 等第三方库来更好地支持MVC模式。 2. **视图(View)**:视图层是用户界面的展示部分,它与模型层交互,展示模型中的数据。在...

    QCon 2009 beijing全球企业开发大会ppt:11.Flex体系架构深度剖析

    - 第三方框架: 如PureMVC、Mate等,为开发者提供了更多的选择。 - **优劣分析**: - 优点: 快速原型设计、高性能渲染、丰富的用户界面组件。 - 缺点: 学习曲线较陡、跨平台兼容性问题。 #### 五、Flex与SOA - **...

Global site tag (gtag.js) - Google Analytics