三、登陆功能的实现
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对象的引用,然后进行后台方法的调用。使用AsyncToken的addResponder来进行返回结果的处理。
/** * 常用的代理 */ 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中,模型通常由Singletons实现,以确保在整个应用中只有一个实例。 2. **视图(View)**:视图是用户界面的展示层,负责显示数据和接收用户输入。视图监听模型的事件,并根据事件更新其显示。Cairngorm...
7. **Presentation Model**(可选):虽然不是Cairngorm的一部分,但MVVM(Model-View-ViewModel)模式常与之结合使用,提供了一个更强大的视图绑定机制。 在提供的文件中,"library.swf"可能是Cairngorm框架的一个...
Cairngorm框架通过实现MVC模式,使Flex应用的各个部分职责分明,便于团队协作和后期维护。 **Cairngorm的核心组件** 1. **Event Dispatcher**:Cairngorm使用事件驱动的通信模式,允许不同组件之间通过发布和监听...
在“flex框架之Cairngorm框架(二)”这个主题中,我们可能深入探讨如何使用Cairngorm与后台进行通信。这通常涉及以下步骤: 1. **创建Command**:首先,为与后台的通信创建一个命令类,例如`...
##### 2.6 Java服务器端功能实现 在Java端,需要编写处理查询和插入图书信息的功能。首先,需要添加MySQL数据库驱动的jar包到项目中,例如`mysql-connector-java-5.0.8-bin.jar`。 接下来,创建对应的实体类和...
模块化是Cairngorm的一个关键特性,它允许我们将应用拆分为独立的功能单元,每个单元称为一个模块。这样可以降低代码复杂性,提高代码的可维护性。 **模块化基础** 1. **模块定义**:在Cairngorm中,模块通常包含...
在Cairngorm中,控制器通常实现为命令(Command)类,它们监听特定事件,执行相应的业务逻辑,并可能更新模型或触发其他命令。 4. **服务定位器(Service Locator)**:提供对应用程序服务的全局访问,例如远程服务...
Cairngorm是面向服务架构(SOA)的轻量级MVC(Model-View-Controller)框架,它为Flex和ActionScript应用提供了强大的设计模式支持,从而帮助开发者实现更高效、可维护的代码结构。 首先,让我们了解MVC模式。MVC是...
在Adobe Flex开发领域,cairngorm和LiveCycle Data Services (LCDS)是两个重要的框架和工具,它们各自为开发者提供了强大的功能。cairngorm作为一个轻量级的MVC(Model-View-Controller)框架,有助于组织和管理Flex...
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 ...
cairngorm.swc供需要的朋友急用
Cairngorm是Flex社区中流行的一种轻量级MVC(Model-View-Controller)框架,它提供了一种结构化的方法来组织和管理Flex项目的代码,从而提高开发效率和代码可维护性。 Cairngorm框架的核心组件包括: 1. **模型...
在Cairngorm中,模型(Model)、视图(View)和控制器(Controller)之间的通信是通过事件驱动机制实现的。 首先,我们来看一下Cairngorm的核心组成部分: 1. **模型(Model)**:模型通常包含了应用的数据和业务...
压缩包中的"cairngorm3 - 副本"可能包含多个源码文件和示例,通过这些你可以深入理解Cairngorm3的架构和实现方式。例如,你可以找到以下类型的文件: - `Command`类:实现特定业务逻辑的类。 - `Event`类:自定义...
随着Flex 3的发展,Cairngorm也进行了相应的升级,提供了更多的特性和改进,使得它成为了当时构建复杂Flex应用的标准之一。 #### 二、Cairngorm框架的关键概念 - **Model-View-Controller (MVC)**:Cairngorm遵循...
- **功能实现**:介绍用户注册功能的具体实现方法,包括表单验证和数据提交。 - **安全性考虑**:讨论在实现用户注册功能时需要注意的安全问题。 #### 第16章:用户登录 - **认证机制**:探讨Cairngorm中用户登录的...
标题中的"flex与java交互 blaze+cairngorm框架实现用户登录"是指使用BlazeDS作为数据交换的桥梁,Cairngorm作为前端的架构指导,来实现一个用户登录功能。下面将详细讲解这两个技术以及如何在MySQL数据库中处理登录...