`
limingnihao
  • 浏览: 1824624 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Cairngorm 之 三、登陆功能的实现

    博客分类:
  • Flex
阅读更多

三、登陆功能的实现

3.1 用户实体类User

       定义用户名和密码。一般要加[Bindable]标签,标记为可绑定。

package  vo
{
	import com.adobe.cairngorm.vo.IValueObject;

	[Bindable]
	public class User implements IValueObject
	{
		public var userName:String = "";
		
		public var password:String = "";
		
		public function User()
		{
		}
	}
}

 

 

 

 

 

3.2        remoteObject服务

基于cairngorm框架里的ServiceLocator标签,它是使用单例模式,在整个项目中只有一个实例,当在此标签内部定义RemoteObject等于后台通信服务的标签时,便会被存储起来再使用时,通过getRemoteObject方法获取。

 

 

<?xml version="1.0" encoding="utf-8"?>
<cairngorm:ServiceLocator 
	xmlns:mx="http://www.adobe.com/2006/mxml" 
	xmlns:cairngorm="com.adobe.cairngorm.business.*">
	
	<mx:RemoteObject id="generalRemoteObject" 
					 destination="fluorine" 
					 endpoint="http://192.1.1.113/liWebService/Gateway.aspx" 
					 source="Li.FluorineFx.Sample" 
					 showBusyCursor="true"/>
	
</cairngorm:ServiceLocator>

  

 

 

3.3        后台代理类GeneralDelegate

首先获取到定义好的RemoteObject对象的引用,然后进行后台方法的调用。使用AsyncTokenaddResponder来进行返回结果的处理。

/**
 * 常用的代理
 */
package business
{
	import com.adobe.cairngorm.business.ServiceLocator;
	import mx.rpc.AsyncToken;
	import mx.rpc.IResponder;
	import vo.User;

	public class GeneralDelegate
	{
		/** 应答器 */
		private var responder:IResponder;
		
		private var service:Object;
		
		public function GeneralDelegate( responder:IResponder )
		{
			this.responder = responder;
			this.service = ServiceLocator.getInstance().getRemoteObject("generalRemoteObject"); 
		}
		
		/**
		 * 登录
		 */
		public function logon( user:User ):void
		{
			var call:AsyncToken = service.Logon(user.userName, user.password);
			call.addResponder(responder);
		}
	}
}

 

 

 

 

3.4        Model

使用单例模式,保存全局数据。

package models
{
	import com.adobe.cairngorm.model.IModelLocator;
	
	[Bindable]
	public class GeneralModel implements IModelLocator
	{
		public var logonResult:String = "";
		
		/** 单一引用对象 */
		private static var generalModel:GeneralModel = null;
		
		[Deprecated(replacement="GeneralModel.getInstance()")]
		public function GeneralModel()
		{
		}
		
		public static function getInstance():GeneralModel
		{
			if( generalModel == null )
			{
				generalModel = new GeneralModel();
			}
			return generalModel;
		}
	}
}

  

 

 

3.5        登录事件类LogonEvent

自定义事件,继承CairngormEvent一般定义一些变量用来存储数据。

/**
 * 登陆操作事件
 */
package control.event
{
	import com.adobe.cairngorm.control.CairngormEvent;
	import vo.User;
	public class LogonEvent extends CairngormEvent
	{
		/** 操作登陆的用户 */
		public var user:User;

		public static const LOGON:String = "logon";
		
		public function LogonEvent(type:String, user:User)
		{
			this.user = user;
			super(type);
		}
	}
}

 

 

 

 

 

3.6        事件注册类GeneralControl

用于对事件注册监听器。

package control
{
	import com.adobe.cairngorm.control.FrontController;
	import control.event.*;
	import commands.*;
	public class GeneralControl extends FrontController
	{
		public function GeneralControl()
		{
			super.addCommand(LogonEvent.LOGON, LogonCommand );//注册,用户登陆命令
		}
	}
}

 

 

 

 

 

3.7 对应Command

       事件触发后的处理方法,和调用后台后返回结果的处理,例如更新model中的数据。

/**
 * 用户登陆,操作命令
 */
package commands
{
	import com.adobe.cairngorm.commands.ICommand;
	import com.adobe.cairngorm.control.CairngormEvent;
	import mx.rpc.IResponder;
	import mx.rpc.events.FaultEvent;
	import mx.rpc.events.ResultEvent;
	import business.GeneralDelegate;
	import errors.ManageErrors;
	import models.GeneralModel;
	import control.event.LogonEvent;
	import vo.User;
	
	public class LogonCommand implements ICommand, IResponder
	{
		public function LogonCommand()
		{
			
		}
		
/**------------------------------- Command接口方法 ----------------------------------------------*/		
		/**
		 * 用户登陆,事件处理方法
		 */
		public function execute( event:CairngormEvent ):void
		{
			var generalDelegate:GeneralDelegate = new GeneralDelegate( this );	
			generalDelegate.logon( (event as LogonEvent).user );
		}

/**------------------------------- IResponder接口方法 ---------------------------------------------*/
		
		public function result( info:Object ):void
		{
			var result:Boolean = (info as ResultEvent).result as Boolean;
			if( result )
			{
				GeneralModel.getInstance().logonResult = "登陆成功";
			}
			else
			{
				GeneralModel.getInstance().logonResult = "登陆失败";
			}
		}
		
		public function fault( info:Object ):void
		{
			ManageErrors.manageFaults( info as FaultEvent );
		}
	}
}

 

 

 

 

3.8 界面Application

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
				layout="absolute" minWidth="1003" minHeight="600" fontSize="12" xmlns:control="control.*" xmlns:services="services.*">
	
	<mx:Script>
		<![CDATA[
			import control.event.LogonEvent;
			
			import models.GeneralModel;
			
			import vo.User;			
			/**
			 * 登陆按钮,事件处理
			 */
			private function buttonLogon_clickHandler(event:MouseEvent):void
			{
				var user:User = new User();
				user.userName = this.textInputUserName.text;
				user.password = this.textInputPassword.text;
				var logonEvent:LogonEvent = new LogonEvent(LogonEvent.LOGON, user);
				logonEvent.dispatch();
			}
			
		]]>
	</mx:Script>
	
	<control:GeneralControl />
	
	<services:GeneralServices />
	
	<mx:Binding source="GeneralModel.getInstance().logonResult" destination="textArea.text"/>
	
	<mx:VBox  width="400" horizontalCenter="0" verticalCenter="90"  horizontalAlign="center">
		<mx:HBox  verticalAlign="middle"  borderStyle="solid">
			<mx:Form >
				<mx:FormItem label="用户名:">
					<mx:TextInput id="textInputUserName" width="150"   />
				</mx:FormItem>
				
				<mx:FormItem label="密码:">
					<mx:TextInput id="textInputPassword" width="150" displayAsPassword="true"  />
				</mx:FormItem>
			</mx:Form>
			<mx:Button label="登陆" click="buttonLogon_clickHandler(event)" />
		</mx:HBox>	
		
		<mx:TextArea id="textArea" text="未登录"  />
	</mx:VBox>
	
</mx:Application>

  

 

 

分享到:
评论

相关推荐

    Cairngorm开发文档中文版

    在Cairngorm中,模型通常由Singletons实现,以确保在整个应用中只有一个实例。 2. **视图(View)**:视图是用户界面的展示层,负责显示数据和接收用户输入。视图监听模型的事件,并根据事件更新其显示。Cairngorm...

    Cairngorm例子

    7. **Presentation Model**(可选):虽然不是Cairngorm的一部分,但MVVM(Model-View-ViewModel)模式常与之结合使用,提供了一个更强大的视图绑定机制。 在提供的文件中,"library.swf"可能是Cairngorm框架的一个...

    cairngorm中文版

    Cairngorm框架通过实现MVC模式,使Flex应用的各个部分职责分明,便于团队协作和后期维护。 **Cairngorm的核心组件** 1. **Event Dispatcher**:Cairngorm使用事件驱动的通信模式,允许不同组件之间通过发布和监听...

    flex框架之Cairngorm框架(二)

    在“flex框架之Cairngorm框架(二)”这个主题中,我们可能深入探讨如何使用Cairngorm与后台进行通信。这通常涉及以下步骤: 1. **创建Command**:首先,为与后台的通信创建一个命令类,例如`...

    Cairngorm框架配置

    ##### 2.6 Java服务器端功能实现 在Java端,需要编写处理查询和插入图书信息的功能。首先,需要添加MySQL数据库驱动的jar包到项目中,例如`mysql-connector-java-5.0.8-bin.jar`。 接下来,创建对应的实体类和...

    cairngorm框架module学习三

    模块化是Cairngorm的一个关键特性,它允许我们将应用拆分为独立的功能单元,每个单元称为一个模块。这样可以降低代码复杂性,提高代码的可维护性。 **模块化基础** 1. **模块定义**:在Cairngorm中,模块通常包含...

    Flex3/4 Cairngorm框架 入门 源码 主要是登陆注册功能。

    在Cairngorm中,控制器通常实现为命令(Command)类,它们监听特定事件,执行相应的业务逻辑,并可能更新模型或触发其他命令。 4. **服务定位器(Service Locator)**:提供对应用程序服务的全局访问,例如远程服务...

    Flex Cairngorm之旅(小项目实例)

    Cairngorm是面向服务架构(SOA)的轻量级MVC(Model-View-Controller)框架,它为Flex和ActionScript应用提供了强大的设计模式支持,从而帮助开发者实现更高效、可维护的代码结构。 首先,让我们了解MVC模式。MVC是...

    cairngorm + lcds最小包.rar

    在Adobe Flex开发领域,cairngorm和LiveCycle Data Services (LCDS)是两个重要的框架和工具,它们各自为开发者提供了强大的功能。cairngorm作为一个轻量级的MVC(Model-View-Controller)框架,有助于组织和管理Flex...

    Cairngorm.swc

    Cairngorm is the lightweight micro-architecture for Rich Internet Applications built in Flex or AIR. A collaboration of recognized design patterns, Cairngorm exemplifies and encourages best-practices ...

    flex Cairngorm.swc

    cairngorm.swc供需要的朋友急用

    Flex框架Cairngorm经典案例源码

    Cairngorm是Flex社区中流行的一种轻量级MVC(Model-View-Controller)框架,它提供了一种结构化的方法来组织和管理Flex项目的代码,从而提高开发效率和代码可维护性。 Cairngorm框架的核心组件包括: 1. **模型...

    Flex开发框架cairngorm入门实例教程

    在Cairngorm中,模型(Model)、视图(View)和控制器(Controller)之间的通信是通过事件驱动机制实现的。 首先,我们来看一下Cairngorm的核心组成部分: 1. **模型(Model)**:模型通常包含了应用的数据和业务...

    cairngorm3实践源码

    压缩包中的"cairngorm3 - 副本"可能包含多个源码文件和示例,通过这些你可以深入理解Cairngorm3的架构和实现方式。例如,你可以找到以下类型的文件: - `Command`类:实现特定业务逻辑的类。 - `Event`类:自定义...

    [cairngorm入门]introducing_cairngorm.pdf

    随着Flex 3的发展,Cairngorm也进行了相应的升级,提供了更多的特性和改进,使得它成为了当时构建复杂Flex应用的标准之一。 #### 二、Cairngorm框架的关键概念 - **Model-View-Controller (MVC)**:Cairngorm遵循...

    Professional Cairngorm

    - **功能实现**:介绍用户注册功能的具体实现方法,包括表单验证和数据提交。 - **安全性考虑**:讨论在实现用户注册功能时需要注意的安全问题。 #### 第16章:用户登录 - **认证机制**:探讨Cairngorm中用户登录的...

    flex与java交互 blaze+cairngorm框架实现用户登录

    标题中的"flex与java交互 blaze+cairngorm框架实现用户登录"是指使用BlazeDS作为数据交换的桥梁,Cairngorm作为前端的架构指导,来实现一个用户登录功能。下面将详细讲解这两个技术以及如何在MySQL数据库中处理登录...

Global site tag (gtag.js) - Google Analytics