Packagejp.co.fujitsu.reffi.client.flex.action
Classpublic class BaseAction
InheritanceBaseAction Inheritance AbstractAction
SubclassesDispatchAction

[概 要]

イベント発生時、コントローラによって起動されるActionの基底クラスです.

[詳 細]

BaseController#bind(EventBinder)によって登録したイベントに対応して このクラスの継承アクションクラスが起動されます。
実行される具象アクションクラスには、テンプレートコールされる以下の処理を実装します。
これらは全て必須では無く、任意での実装になります。
これらのメソッドはBaseActionのrunメソッド内コールフロー、 及びBaseControllerからコールバックされる為、任意での呼び出しは不要です。

[備 考]

上記のようにこの基底クラスは、処理フローを実装して開発手順の型決めを行っています。
全てのモデル処理結果をsucessForward、failureForwardでハンドリングするのでは無い場合はDispatchActionを、
reserveModel、nextModelによるモデル実行制御を行わない場合は、FlexibleActionを基底クラスとして選択して下さい。



典型的なBaseAction継承アクション
        package demo.client.pdf.action{
            
            import flash.events.Event;
            
            import jp.co.fujitsu.reffi.client.flex.action.BaseAction;
            import jp.co.fujitsu.reffi.client.flex.model.BaseModel;
            import jp.co.fujitsu.reffi.client.flex.model.events.ModelProcessEvent;
            import jp.co.fujitsu.reffi.client.flex.model.rpc.RpcControllerClientCore;
            
            import mx.controls.Alert;
            import mx.controls.ComboBox;
            import mx.controls.DataGrid;
            import mx.rpc.events.ResultEvent;
        
            public class CreateTableAction extends BaseAction{
                
                // ① RPC呼び出しモデルを予約します(このケースではサーバ側プログラムとしてRPCControllerを使用)
                override protected function reserveModels(models:Array):void{
                    models.push(Class(RPCControllerClientCore));
                }
                
                // ② 生成されたRPCControllerClientCoreインスタンスにパラメータを設定
                override public function nextModel(index:int, prev:ModelProcessEvent, next:BaseModel):Boolean {
                    // index 0としてRPCControllerClientCoreインスタンスが引数nextに入っています
                    if (index == 0) {
                        var dataCount:String = ComboBox(getComponentById("dataCount")).text;
                        // サーバ側実行モデルをFQCN指定
                        RpcControllerClientCore(next).modelFQCN = "demo.rpc.model.PDFTableModel";
                        RpcControllerClientCore(next).addRpcParameter("dataCount", dataCount);
                    }
                    return true;
                }
                
                // ③ RPC正常終了処理を記述します
                override public function successForward(index:int, model:BaseModel, resultEvent:Event):void{
                    var event:ResultEvent = resultEvent as ResultEvent;
                    DataGrid(getComponentByName("pdfWindowTable")).dataProvider = event.result;
                }
                
                // ④ RPC異常終了処理を記述します
                override public function failureForward(index:int, model:BaseModel, faultEvent:Event):Event{
                    Alert.show("テーブル作成に失敗しました。");
                    return faultEvent;
                }
            }
        }
  

Copyright (c) 2008-2009 FUJITSU Japan All rights reserved.



Public Properties
 PropertyDefined by
 Inheritedcontroller : BaseController

[概 要]

このアクションを起動したコントローラオブジェクトです.
AbstractAction
 Inheriteddocument : Object

[概 要]

このアクション(イベント)を起こしたUIComponentが所属するdocumentオブジェクトを設定します.
AbstractAction
 InheritedparameterMapping : ParameterMapping

[概 要]

MVC各レイヤを伝播するパラメータオブジェクトです.
AbstractAction
Public Methods
 MethodDefined by
  
complete():void

[概 要]

reserveModelsで登録されたモデル群が全て終了した契機でコールされます.
BaseAction
  
failureForward(index:int, model:BaseModel, faultEvent:Event):Event

[概 要]

登録した機能モデルの異常終了処理を記述するメソッドです.
BaseAction
  
nextModel(index:int, prev:ModelProcessEvent, next:BaseModel):Boolean

[概 要]

予約モデルがコントローラによって実行される直前にコールバックされるメソッドです.
BaseAction
  

[概 要]

コントローラにコールされるアクションの主幹メソッドです.
BaseAction
  
successForward(index:int, model:BaseModel, resultEvent:Event):void

[概 要]

登録した機能モデルの正常終了処理を記述するメソッドです.
BaseAction
  

[概 要]

validatorsで指定したValidatorがエラー検出した場合、テンプレートコールされます.
BaseAction
Protected Methods
 MethodDefined by
 Inherited
addPermanent(key:Object, value:Object):void

[概 要]

nSWF間で共有可能な恒久領域に、引数keyで値valueを設定します.
AbstractAction
 Inherited
addPopUp(name:String, displayObject:IFlexDisplayObject, modal:Boolean = false, centered:Boolean = false):void

[概 要]

ポップアップ画面を表示します.
AbstractAction
 Inherited
addSingletonPopUp(name:String, displayObject:IFlexDisplayObject, modal:Boolean = false, centered:Boolean = false):void

[概 要]

シングルトンポップアップ画面を表示します.
AbstractAction
 Inherited
getApplication():Application

[概 要]

このアクションを起動したコンポーネントが所属するApplicationを取得します.
AbstractAction
 Inherited
getComponentById(id:String, searchRange:int = 0x03):DisplayObject

[概 要]

第一引数idをid属性として持つ画面コンポーネントを取得します.
AbstractAction
 Inherited
getComponentByIdFrom(container:DisplayObjectContainer, id:String):DisplayObject

[概 要]

第一引数containerから、第二引数idをid属性として持つ画面コンポーネントを取得します.
AbstractAction
 Inherited
getComponentByName(namePattern:String, searchRange:int = 0x03):DisplayObject

[概 要]

第一引数namePatternをname属性として持つ画面コンポーネントを取得します.
AbstractAction
 Inherited
getComponentByNameFrom(container:DisplayObjectContainer, namePattern:String):DisplayObject

[概 要]

第一引数containerから、第二引数namePatternをname属性として持つ画面コンポーネントを取得します.
AbstractAction
 Inherited
getComponentsById(id:String, searchRange:int = 0x03):Array

[概 要]

第一引数idをid属性として持つ画面コンポーネント配列を取得します.
AbstractAction
 Inherited
getComponentsByName(namePattern:String, searchRange:int = 0x03):Array

[概 要]

第一引数namePatternをname属性として持つ画面コンポーネント配列を取得します.
AbstractAction
 Inherited
getComponentsByNameFrom(container:DisplayObjectContainer, namePattern:String):Array

[概 要]

第一引数containerから、第二引数namePatternをname属性として持つ画面コンポーネント配列を取得します.
AbstractAction
 Inherited

[概 要]

このアクションを起動したイベントのcurrentTargetを取得します.
AbstractAction
 Inherited
getEventSourceObject():DisplayObject

[概 要]

恒久的なイベントカレントターゲットです.
AbstractAction
 Inherited
getEventTarget():Object

[概 要]

このアクションを起動したイベントのtargetを取得します.
AbstractAction
 Inherited

[概 要]

AVM上にロードされているBaseControllerから、引数nameをnameとして持つものを取得します.
AbstractAction
 Inherited
getLoadedControllers():Dictionary

[概 要]

AVM上にロードされているBaseControllerのマッピングを取得します.
AbstractAction
 Inherited
getObjectById(id:String):Object

[概 要]

引数idをid属性として持つオブジェクトを取得します.
AbstractAction
 Inherited
getPermanent(key:Object):Object

[概 要]

nSWF間で共有可能な恒久領域から、引数keyに対応する値を取得します.
AbstractAction
 Inherited
getPopUp(name:String):Array

[概 要]

既に表示されているポップアップ画面インスタンス配列を取得します.
AbstractAction
 Inherited
getSingletonPopUp(name:String):IFlexDisplayObject

[概 要]

既に表示されている重複を許可しないポップアップ画面インスタンスを取得します.
AbstractAction
 Inherited
isExistPopUp(name:String):Boolean

[概 要]

引数で指定した名前を持つポップアップ画面が既に画面表示されているかどうか調べます.
AbstractAction
  

[概 要]

モデル群実行を非シーケンシャルに行うかどうかを設定するメソッドです.
BaseAction
  
isWaitModelsDone():Boolean

[概 要]

reserveModelsによって登録された全モデルが終了するまでモーダル状態にするかどうかのフラグを返却します.
BaseAction
  
prepare(parameterMapping:ParameterMapping):Boolean

[概 要]

BaseAction内で最初にテンプレートコールされるメソッドです.
BaseAction
 Inherited
removeAllPopUp():Boolean

[概 要]

全てのポップアップ画面を画面から消去します.
AbstractAction
 Inherited
removePermanent(key:Object):void

[概 要]

nSWF間で共有可能な恒久領域から、引数keyを削除します.
AbstractAction
 Inherited
removePopUp(name:String):Boolean

[概 要]

引数windowNameに対応するポップアップ画面を画面から消去します.
AbstractAction
  
reserveModels(models:Array):void

[概 要]

Action処理終了後、コントローラに実行させるモデルクラス群の予約を行います.
BaseAction
  
trap(e:Error):Error

[概 要]

Action内で発生した同期エラーをハンドリングします.
BaseAction
 Inherited
validate(validators:Array):ValidateErrors

[概 要]

バリデーションを行うメソッドです.
AbstractAction
  
validators(validators:Array):void

[概 要]

このイベントアクションフローで必要なバリデーション情報を指定追加します.
BaseAction
Method detail
complete()method
public function complete():void

[概 要]

reserveModelsで登録されたモデル群が全て終了した契機でコールされます.

[詳 細]

reserveModelsで登録された全モデルがModelProcessEvent.FINISHEDイベントを発行 した契機でコントローラによってコールバックされます。

[備 考]

failureForward()method 
public function failureForward(index:int, model:BaseModel, faultEvent:Event):Event

[概 要]

登録した機能モデルの異常終了処理を記述するメソッドです.

[詳 細]

reserveModelsによって予約されたどれか一つのモデルが失敗した場合にコールバックされます。
機能モデルがModelProcessEvent.FAILUREイベントを発行し、コントローラにハンドリング された時点でコールバックされます。

[備 考]

パラメータ
index:int — 結果を返却したモデルの実行インデックス
 
model:BaseModel — 結果を返却したモデルインスタンス
 
faultEvent:Event — モデル異常終了時のイベント

戻り値
Event — 引数faultEvent、若しくはオーバーライドメソッドで変換されたイベント
isRunModelsAndNoWait()method 
protected function isRunModelsAndNoWait():Boolean

[概 要]

モデル群実行を非シーケンシャルに行うかどうかを設定するメソッドです.

[詳 細]

デフォルトではfalseを返却します。
BaseAction#reserveModels(Arrray)によって予約されたモデル群を コントローラが実行する時、1モデルの結果取得を待ってから次モデルを 実行するかどうかの設定値として解釈されます。

[備 考]

戻り値
Boolean — true : モデルの処理結果取得を待たずに次モデル実行
isWaitModelsDone()method 
protected function isWaitModelsDone():Boolean

[概 要]

reserveModelsによって登録された全モデルが終了するまでモーダル状態にするかどうかのフラグを返却します.

[詳 細]

このメソッドをオーバーライドしてtrueを返却することで、登録された 全ての機能モデルがModelProcessEvent.FINISHEDイベントを発行するまで、 プログレスバー付きのモーダルダイアログが表示されます。

[備 考]

戻り値
Boolean — reserveModelsで予約された全モデルが実行終了するまで画面をモーダルにするかどうかのフラグ
nextModel()method 
public function nextModel(index:int, prev:ModelProcessEvent, next:BaseModel):Boolean

[概 要]

予約モデルがコントローラによって実行される直前にコールバックされるメソッドです.

[詳 細]

reserveModelsで登録したモデル数+1回、コントローラによって呼び出されます。
(1モデル登録の場合でも、実行前、実行後と2回呼び出されます。)
引数prevには前回モデルの処理結果(初回null)が、
引数nextには次回モデルインスタンス(最終回null)が渡されます。
前回モデルインスタンスを取得する場合はprev.targetで取得することが出来ます。

BaseAction#isRunModelsAndNoWait()がfalseの場合、次回モデルの実行が 前回モデルの終了後であることが確約される為、prevの結果を元にnextの動作設定をすることが出来ます。

[備 考]

BaseAction#isRunModelsAndNoWait()がtrueの場合、コントローラはモデルの実行を シーケンシャルには行いません。
この場合、引数prevにはnullが渡されます。

パラメータ

index:int — 実行インデックス(0 ~ reserveModelsによるモデル登録数)
 
prev:ModelProcessEvent — 前インデックスで実行されたモデル処理結果イベント
 
next:BaseModel — 次インデックスで実行される予定のモデルインスタンス

戻り値
Boolean — 次のモデルを実行するかどうかのフラグ
prepare()method 
protected function prepare(parameterMapping:ParameterMapping):Boolean

[概 要]

BaseAction内で最初にテンプレートコールされるメソッドです.

[詳 細]

単純なDOM操作等、クライアント内で完結するようなイベント処理や、 条件を判断して以降の処理を実行しない、
等の処理を実装する場合は、このメソッドをオーバーライドして処理を記述して下さい。
オーバーライド先でfalseを返却すると、それ以降のアクション処理は行われません。

[備 考]

パラメータ
parameterMapping:ParameterMapping — MVC各レイヤを伝播するパラメータオブジェクト

戻り値
Boolean — 以降の処理を継続するかどうかのフラグ


条件によって処理を中止する(発言欄が空の状態で送信ボタンが押下された場合は送信しない)
             override protected prepare(parameterMapping:ParameterMapping):ParameterMapping {
                 String chatRemark = 
                     TextInput(getComponentByName("chat.chatRemark")).text;
             
                 if(chatRemark.length == 0){
                     return false;
                 }else{
                     return true;
                 }
             }
   

reserveModels()method 
protected function reserveModels(models:Array):void

[概 要]

Action処理終了後、コントローラに実行させるモデルクラス群の予約を行います.

[詳 細]

BaseModel基底クラスを継承して自作モデルクラスを作成し、登録することが出来ますが、 HTTPリクエスト送信、Pub/Sub実装といった使用頻度の高い機能モデルについては Reffi F/Wでも提供しています。詳しくはmodelパッケージを参照して下さい。

[備 考]

以下のように実行するモデルクラスを指定して下さい。
             package demo.client.action.login {
          
                 import jp.co.fujitsu.reffi.client.flex.action.BaseAction;
                 import demo.client.model.login.LoginLogic;
          
                 public class LoginAction extends BaseAction {
                     override protected function reserveModels(models:Array):void{
                         ma.push(Class(LoginLogic)); 
                     }
                 }
             }
   
パラメータ
models:Array — 実行するモデルクラスを格納するリストオブジェクト
run()method 
public override function run(parameterMapping:ParameterMapping):ParameterMapping

[概 要]

コントローラにコールされるアクションの主幹メソッドです.

[詳 細]

継承クラスから情報を収集してコントローラに返却します。 以下の順にテンプレートメソッドがコールされます。
  1. prepare(ParameterMapping) : 前準備の実装、クライアント完結コードの実装
  2. validators(Array) : バリデータオブジェクトの登録
  3. validate(Array) : バリデーションの実行
  4. validationFault(ValidateErrors) : バリデーションエラーハンドリング
  5. reserveModels(Array) : 実行モデルの登録

上記のコールフロー終了後、ParameterMappingオブジェクトがコントローラに返却されます。

prepare実装メソッドでfalseを返却した場合、又はvalidateメソッドが一つでも ValidateErrorオブジェクトを返却した場合、
コントローラに返却されるParameterMappingオブジェクトはnullになります。
nullのParameterMappingを受け取ったコントローラは以降の処理を中止します。

[備 考]

このメソッドを実装する必要は有りません。

パラメータ

parameterMapping:ParameterMapping — MVC各レイヤを伝播するパラメータオブジェクト

戻り値
ParameterMapping — 継承Actionから収集した、コントローラに返却される制御情報
successForward()method 
public function successForward(index:int, model:BaseModel, resultEvent:Event):void

[概 要]

登録した機能モデルの正常終了処理を記述するメソッドです.

[詳 細]

reserveModelsによって予約された1モデル処理成功時にコントローラにコールバックされます。
機能モデルがModelProcessEvent.SUCCESSイベントを発行し、コントローラにハンドリング された時点でコールバックされます。

実行された機能モデルの種類によって第三引数resultEventの型が変化します。
(HTTPServiceCoreの場合はResultEvent、ConsumerCoreの場合はMessageEvent等)

[備 考]

パラメータ
index:int — 結果を返却したモデルの実行インデックス
 
model:BaseModel — 結果を返却したモデルインスタンス
 
resultEvent:Event — モデル処理結果オブジェクト
trap()method 
protected function trap(e:Error):Error

[概 要]

Action内で発生した同期エラーをハンドリングします.

[詳 細]

デフォルト処理は有りません。

[備 考]

パラメータ
e:Error — アクション内で発生した例外

戻り値
Error — 引数e、若しくはオーバーライド先で生成した例外
validationFault()method 
public function validationFault(faults:ValidateErrors):void

[概 要]

validatorsで指定したValidatorがエラー検出した場合、テンプレートコールされます.

[詳 細]

通常のバリデータのエラー処理の他、独自のエラー通知表現を実装する場合にオーバーライドします。
validateメソッドによるValidateErrors返却後、BaseAction#run(ParameterMapping)は BaseAction#validationFault(ValidateErrors)メソッドをテンプレートコールします。
ValidateErrorをハンドリングする場合は、validationFaultメソッドをオーバーライドして下さい。

[備 考]

パラメータ
faults:ValidateErrors — validatorsで予約されたValidator配列が出したエラーイベントが入ったリスト


            override public function validationFault(errors:ValidateErrors):void {
                var error:ValidateError = errors.getError(0);
                Label(getComponentById("faxError")).text = error.message;
            } 
   

validators()method 
protected function validators(validators:Array):void

[概 要]

このイベントアクションフローで必要なバリデーション情報を指定追加します.

[詳 細]

具象アクションでこのメソッドをオーバーライドして、引数validatorsに Validatorインスタンスを追加することでアクションの処理フロー中に バリデーションが掛かるようになります。

[備 考]

Flex、AIRのValidatorはsourceプロパティとしてコンポーネントが追加されると それ以降ValueCommitイベントで逐次バリデーションを行いますが、
このメソッドで登録したValidatorはアクションが稼動した契機でのみ、 バリデーションが行われます。

パラメータ

validators:Array — mx.validators.Validator継承オブジェクトを格納するリスト


TextInputに対して桁数チェックを行うValidatorを登録
            override protected function validators(validators:Array):void {
                var rangeValidator:StringValidator = new StringValidator();
                rangeValidator.source = getComponentById("fax1");
                rangeValidator.property = "text";
                rangeValidator.maxLength = 4;
                rangeValidator.minLength = 3;
                rangeValidator.tooLongError = "FAX番号は3~4桁の数字で入力してください。";
                rangeValidator.tooShortError = "FAX番号は3~4桁の数字で入力してください。";
                rangeValidator.required = true;
                rangeValidator.requiredFieldError = "FAX番号は必須です。";
                rangeValidator.enabled = true;
                validators.push(rangeValidator);
            }