jp.co.fujitsu.reffi.client.nexaweb.action
クラス BaseAction

java.lang.Object
  上位を拡張 jp.co.fujitsu.reffi.client.nexaweb.action.AbstractAction
      上位を拡張 jp.co.fujitsu.reffi.client.nexaweb.action.BaseAction
すべての実装されたインタフェース:
Action
直系の既知のサブクラス:
DispatchAction

public class BaseAction
extends AbstractAction

[概 要]

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

[詳 細]

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

[備 考]

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

使用例)
・典型的なBaseAction継承アクション

    package demo.client.form.action;

    import java.util.List;

    import jp.co.fujitsu.reffi.client.nexaweb.action.BaseAction;
    import jp.co.fujitsu.reffi.client.nexaweb.model.HTTPRequestCore;
    import jp.co.fujitsu.reffi.client.nexaweb.model.Model;

    public class OpenPostalWindowAction extends BaseAction {

        // ①前準備処理を実装します
        @Override
        protected boolean prepare(ParameterMapping parameterMapping) throws Exception {
            System.out.println("サーバからpostal.xalを取得してクライアント画面にレンダリングします");
            return true;
        }
    
        // ②機能モデルを登録します
        @Override
        protected void reserveModels(List> models) {
            models.add(HTTPRequestCore.class);
        }

        // ③コントローラによってインスタンス化された機能モデルの設定を行います
        @Override
        public void nextModel(int index, Model prev, Model next) throws Exception{
            switch(index){
                case 0:
                    // サーバロジックは任意
                    ((HTTPRequestCore)next).setRequestUrl("webcontroller");
                    ((HTTPRequestCore)next).addUrlParameters("forward.page", "/pages/postal.xal");
                    break;
            }
        }

        // ④機能モデルの正常終了処理結果をハンドリングします
        @Override
        public void successForward(int index, Model model, Object result) throws Exception {
            System.out.println("postal.xal受信、レンダリング正常終了");
        }
    
        // ⑤´機能モデルの異常終了処理結果をハンドリングします
        @Override
        public Exception failureForward(int index, Model model, Exception e) {
            System.out.println("異常終了");
        }
    }

 
・一回目の通信結果に応じて二回目の通信を振り分ける
    package demo.client.distribute.action;

    import java.util.List;

    import jp.co.fujitsu.reffi.client.nexaweb.action.BaseAction;
    import jp.co.fujitsu.reffi.client.nexaweb.model.HTTPRequestCore;
    import jp.co.fujitsu.reffi.client.nexaweb.model.Model;

    import demo.share.dao.DataDao;
    
    public class distributeLogicAction extends BaseAction {

        @Override
        protected void reserveModels(List> models) {
            models.add(HTTPRequestCore.class);
            models.add(HTTPRequestCore.class);
        }

        @Override
        public void nextModel(int index, Model prev, Model next) throws Exception{
            // サーバロジックは任意
            ((HTTPRequestCore)next).setRequestUrl("webcontroller");
            
            switch(index){
                case 0:
                    ((HTTPRequestCore)next).addUrlParameters("model.fqcn", "demo.server.model.FetchDataModel");
                    break;
                case 1:
                    DataDao dao = (DataDao)prev.getResult();
                    int div = dao.getDivision();
                    // 一回目の通信結果を判断して実行するサーバロジックを切り替える
                    if(div == 0) {
                        ((HTTPRequestCore)next).addUrlParameters("model.fqcn", "demo.server.model.Div0Model");
                    }else {
                        ((HTTPRequestCore)next).addUrlParameters("model.fqcn", "demo.server.model.Div1Model");
                    }
            }
        }
    }

 

[環 境] JDK 6.0 Update 11

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

作成者:
Project Reffi

コンストラクタの概要
BaseAction()
           
 
メソッドの概要
 void complete()
          [概 要] reserveModelsで登録されたモデル群が全て終了した契機でコールされます.
 Exception failureForward(int index, Model model, Exception e)
          [概 要] モデル処理が異常終了した契機でコントローラにコールバックされるメソッドです。
protected  boolean isRunModelsAndNoWait()
          [概 要] モデル群実行を非シーケンシャルに行うかどうかを設定するメソッドです。
 boolean nextModel(int index, ModelProcessEvent prev, Model next)
          [概 要] 予約モデルがコントローラによって実行される直前にコールバックされるメソッドです。
protected  boolean prepare(ParameterMapping parameterMapping)
          [概 要] BaseAction内で最初にテンプレートコールされるメソッドです。
protected  void reserveModels(List<Class<? extends Model>> models)
          [概 要] Action処理終了後、コントローラに実行させるモデルクラス群の予約を行います。
 ParameterMapping run(ParameterMapping parameterMapping)
          [概 要] コントローラにコールされるアクションの主幹メソッドです。
 void successForward(int index, Model model, Object result)
          [概 要] モデル処理が正常終了した契機でコントローラにコールバックされるメソッドです。
protected  Exception trap(Exception e)
          [概 要] Action内で発生した例外をハンドリングします。
protected  void validators(List<CustomValidator> validators)
          [概 要] バリデータ群を登録するメソッドです。
 
クラス jp.co.fujitsu.reffi.client.nexaweb.action.AbstractAction から継承されたメソッド
addPermanent, alertDialog, cascadeWindows, cascadeWindows, closeChildWindows, closeOwnWindow, closeSiblingWindows, createElement, createElementObjectDataSource, getAllWindows, getChildWindows, getClientLogger, getController, getElementById, getElementByNameFromOwnWindow, getElementByNameFromWindow, getElementObjectDataSource, getElementValueByNameFromOwnWindow, getElementValueByNameFromWindow, getObjectDataSourceById, getObjectDataSourceByName, getOwnWindow, getOwnWindowCommunicateId, getParameterMapping, getParentWindow, getPermanent, getPermanent, getSerializedHttpResponseContent, getSiblingWindows, getSubscribingTopicNames, getWindowRect, getWindowsByCommunicateId, isSubscribing, moveToWindowBottomPosition, moveToWindowPosition, moveToWindowPosition, moveToWindowRightPosition, removeElementObjectDataSource, removePermanent, renderResponseToUI, returnElementStatusBeforeError, setController, setParameterMapping, tileWindows, tileWindows, validate, validationFault
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

BaseAction

public BaseAction()
メソッドの詳細

run

public ParameterMapping run(ParameterMapping parameterMapping)
                     throws Exception

[概 要]

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

[詳 細]

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

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

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

[備 考]

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

定義:
インタフェース Action 内の run
オーバーライド:
クラス AbstractAction 内の run
パラメータ:
parameterMapping - MVC各レイヤを伝播するパラメータオブジェクト
戻り値:
継承Actionから収集した、コントローラに返却される制御情報
例外:
Exception - アクション実行例外

prepare

protected boolean prepare(ParameterMapping parameterMapping)
                   throws Exception

[概 要]

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

[詳 細]

デフォルト処理は有りません。 オーバーライド先でfalseを返却すると、それ以降のアクション処理は行われません。

[備 考]

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

使用例)

    @Override
    protected boolean prepare(ParameterMapping parameterMapping) throws Exception {
         // 発言欄が空の状態で送信ボタンが押下された場合は送信しない
        String chatRemark = 
        getElementValueByName("chat.chatRemark").getElementValue(0).getValue();
    
        if(chatRemark.length() == 0){
            return false;
        }else{
            return true;
        }
    }
 

パラメータ:
parameterMapping - MVC各レイヤを伝播するパラメータオブジェクト
戻り値:
以降の処理を継続するかどうかのフラグ
例外:
Exception

reserveModels

protected void reserveModels(List<Class<? extends Model>> models)

[概 要]

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

[詳 細]

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

[備 考]

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

パラメータ:
models - 実行するモデルクラスを格納するリストオブジェクト

nextModel

public boolean nextModel(int index,
                         ModelProcessEvent prev,
                         Model next)
                  throws Exception

[概 要]

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

[詳 細]

reserveModelsで登録したモデル数+1回、コントローラによって呼び出されます。
引数prevには前回モデルの処理結果(初回null)が、 引数nextには次回モデルインスタンス(最終回null)が渡されます。

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

[備 考]

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

パラメータ:
index - 実行インデックス(0 ~ reserveModelsによるモデル登録数)
prev - 前インデックスで実行されたモデル処理結果イベント
next - 次インデックスで実行される予定のモデルインスタンス
戻り値:
次のモデルを実行するかどうかのフラグ
例外:
Exception - オーバーライド先で発生する可能性の有る例外

validators

protected void validators(List<CustomValidator> validators)

[概 要]

バリデータ群を登録するメソッドです。

[詳 細]

[備 考]

パラメータ:
validators - CustomValidator継承クラスを追加するリストオブジェクト

isRunModelsAndNoWait

protected boolean isRunModelsAndNoWait()

[概 要]

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

[詳 細]

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

[備 考]

戻り値:
true : モデルの処理結果取得を待たずに次モデル実行

successForward

public void successForward(int index,
                           Model model,
                           Object result)
                    throws Exception

[概 要]

モデル処理が正常終了した契機でコントローラにコールバックされるメソッドです。

[詳 細]

コントローラが実行した機能モデルの数分コールバックされます。
どのモデルの処理結果か、を判断するには第一引数indexを判定するか、 第二引数modelのインスタンスを判定します。

モデルの処理結果は第三引数resultから取得しますが、実行したモデルの種類によって、 resultの実体(型)が異なります。
フレームワークが提供する以下の代表的なモデルは、次のようにresultを返却します。

HTTPRequestCore

SubscribeCore

[備 考]

機能モデルによって変換される前の処理結果を取得する場合は、以下のように取得可能です。
Object planeResult = model.getResult();

パラメータ:
index - 結果を返却したモデルの実行インデックス
model - 結果を返却したモデルインスタンス
result - モデル処理結果オブジェクト
例外:
Exception

failureForward

public Exception failureForward(int index,
                                Model model,
                                Exception e)

[概 要]

モデル処理が異常終了した契機でコントローラにコールバックされるメソッドです。

[詳 細]

コントローラに実行されたモデルが例外を発生させた場合、コールバックされます。
第一引数index、第二引数modelを判定して、エラーハンドリング実装を行います。

戻り値Exceptionは最終的にコントローラにキャッチ (BaseController.trap(Throwable))されます。
nullを返却すると、上記のコントローラによるキャッチは発生しません。

[備 考]

パラメータ:
index - 結果を返却したモデルの実行インデックス
model - 結果を返却したモデルインスタンス
e - モデル異常終了時の例外オブジェクト
戻り値:
引数e、若しくはオーバーライドメソッドで変換された例外

complete

public void complete()

[概 要]

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

[詳 細]

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

[備 考]


trap

protected Exception trap(Exception e)

[概 要]

Action内で発生した例外をハンドリングします。

[詳 細]

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

[備 考]

パラメータ:
e - アクション内で発生した例外
戻り値:
引数e、若しくはオーバーライド先で生成した例外


Copyright(C) Fujitsu All Rights Reserved.