|
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Objectcom.nexaweb.client.mco.AbstractMco
jp.co.fujitsu.reffi.client.nexaweb.controller.BaseController
public class BaseController
[概 要]
アクションとモデルを制御する基底コントローラクラスです。[詳 細]
コントローラは大きく分けて二つの役割を担います。1.【コンポーネントイベントとアクションの紐付け】
BaseControllerを継承したコントローラクラスでbind(EventBinder)
をオーバーライドする、
若しくはreffi-client-config.xmlを定義することでコンポーネントイベントとアクションの紐付けを行います。
ui DOMに該当のコンポーネントが挿入された時、紐付けられた情報を元にイベント登録を行います。
2.【イベント発生時の処理フロー形成】
1で登録されたイベントが発生した時、handlerFacade()
が全てのイベントハンドリングの
入り口となります。
イベント処理を委譲されたBaseControllerは以下の処理フローを作ります。
実行順序 | BaseAction | BaseController | BaseModel |
1 | handlerFacade() |
||
2 | invoke(Class, ParameterMapping) |
||
3 | runAction(Class, ParameterMapping) |
||
4 | run(ParameterMapping) |
||
5 | runModels(List, ParameterMapping, int, ModelProcessEvent) |
||
5´ | runModelsAndNoWait(List, ParameterMapping) |
||
6 | run() |
||
7 | モデル処理管理リスナ(成功) | ||
8 | successForward(int, Model, Object) |
||
7´ | モデル処理管理リスナ(失敗) | ||
8´ | failureForward(int, Model, Exception) |
||
9 | trap(Throwable) |
||
10 | handlerFinalize(ParameterMapping) |
[備 考]
使用例)package demo.client.controller; import jp.co.fujitsu.reffi.client.nexaweb.controller.BaseController; import jp.co.fujitsu.reffi.client.nexaweb.controller.EventBinder; import jp.co.fujitsu.reffi.client.nexaweb.controller.ParameterMapping; import demo.client.chat.action.ChatWindowClosingAction; import demo.client.chat.action.EnterChannelAction; import demo.client.chat.action.LeaveChannelAction; import demo.client.chat.action.RemarkSendAction; import demo.client.menu.action.ConsoleClearButtonAction; import demo.client.menu.action.LineupWindowsAction; import demo.client.menu.action.OpenChatAction; import demo.client.menu.action.OpenDemoErrorWindowAction; import demo.client.menu.action.OpenDemoMapWindowAction; import demo.client.menu.action.OpenDemoScrollWindowAction; import demo.client.menu.action.OpenFormAction; import demo.client.menu.action.OpenRmiWindowAction; import demo.client.menu.action.OpenServerPushAction; import demo.client.windowGrouping.action.OpenWindowGroupParentAction; public class DemoController extends BaseController { @Override protected void initialize() { // 初期化処理記述 } @Override protected void bind(EventBinder eventBinder) { // メニュー画面アクション eventBinder.addEventBinding("menu.openChat", "onCommand", OpenChatAction.class); eventBinder.addEventBinding("menu.openForm", "onCommand", OpenFormAction.class); eventBinder.addEventBinding("menu.openWindowGroupParent", "onCommand", OpenWindowGroupParentAction.class); eventBinder.addEventBinding("menu.lineupWindows", "onCommand", LineupWindowsAction.class); eventBinder.addEventBinding("menu.openServerPush", "onCommand", OpenServerPushAction.class); eventBinder.addEventBinding("menu.demoScrollWindowButton", "onCommand", OpenDemoScrollWindowAction.class); eventBinder.addEventBinding("menu.demoMapWindowButton", "onCommand", OpenDemoMapWindowAction.class); eventBinder.addEventBinding("menu.demoTrafficWindowButton", "onCommand", OpenDemoErrorWindowAction.class); eventBinder.addEventBinding("menu.demoRmiWindowButton", "onCommand", OpenRmiWindowAction.class); eventBinder.addEventBinding("menu.consoleClearButton", "onCommand", ConsoleClearButtonAction.class); // チャットデモ画面アクション eventBinder.addEventBinding("chat.remarkSend", "onCommand", RemarkSendAction.class); eventBinder.addEventBinding("chat.enterChannel", "onCommand", EnterChannelAction.class); eventBinder.addEventBinding("chat.leaveChannel", "onCommand", LeaveChannelAction.class); eventBinder.addEventBinding("chat.chatWindow", "onClose", ChatWindowClosingAction.class); } @Override protected void handlerFinalize(ParameterMapping mapping) { // 毎イベント最終処理記述 } @Override public void unload() { // ブラウザが閉じるイベント処理を記述 } }・具象コントローラの登録方法
<xal xmlns="http://openxal.org/ui/java"> <mco:mco xmlns:mco="http://openxal.org/core/mco" id="controller" src="demo.client.controller.DemoController"/> <rootPane> <freePane height="768px" width="1024px"> </freePane> <window height="300px" title="Reffi Functional Demo メニュー" width="300px" x="10px" y="10px"> <freePane> <button height="25px" name="openChat" text="チャットアプリデモ" width="250px" x="10px" y="10px"/> <button name="openTableWindow" height="25px" text="テーブルデモ" width="250px" x="10px" y="50px"/> </freePane> </window> </rootPane> </xal>
[環 境] JDK 6.0 Update 11
Copyright (c) 2008-2009 FUJITSU Japan All rights reserved.
フィールドの概要 | |
---|---|
static String |
HANDLER_ENTRY_POINT
ハンドラエントリポイント |
コンストラクタの概要 | |
---|---|
BaseController()
[概 要] デフォルトコンストラクタです。 |
メソッドの概要 | |
---|---|
void |
addedToContainer(Container container,
String name)
[概 要] ui DOMに対して、イベントハンドラ属性の登録を行うエレメント挿抜監視リスナを登録します。 |
protected void |
addInvokeThread(String elementId,
String eventType)
[概 要] 多重起動抑制管理に登録をします。 |
protected void |
bind(EventBinder eventBinder)
[概 要] xalで定義されたエレメントと、アクションを紐付けるメソッドです。 |
protected ParameterMapping |
createParameterMapping()
[概 要] MVC各レイヤを巡回するParameteraMappingオブジェクトを生成、初期化します。 |
protected void |
errorDialog(String title,
String message)
[概 要] エラーダイアログ表示を行います。 |
ClientConfig |
getClientConfig()
[概 要] フレームワークの挙動情報を保持するオブジェクトを取得します。 |
Log |
getClientLogger()
[概 要] クライアントログ発行オブジェトを取得します。 |
ElementSnapshot |
getErrorElementSnapshot()
[概 要] バリデーションエラーが発生したエレメントのエラー前クローン保存領域を取得します。 |
EventBinder |
getEventBinder()
[概 要] イベント紐付けオブジェクトを取得します。 |
Map<Object,Object> |
getPermanent()
[概 要] アプリ起動~終了まで存在するデータ保存領域を取得します。 |
void |
handlerFacade()
[概 要] 全ユーザ定義イベントをハンドルする入り口になるメソッドです。 |
protected void |
handlerFinalize(ParameterMapping mapping)
[概 要] 各ユーザ定義イベントハンドリングの最後にテンプレートコールされるメソッドです。 |
protected void |
initialize(ClientConfig config)
[概 要] 初期化処理が記述可能なメソッドです。 |
Object |
invoke(Class<? extends Action> actionClass,
ParameterMapping parameterMapping)
[概 要] コントローラの主幹メソッドです。 |
protected boolean |
isDuplicateActionInvoke(ParameterMapping parameterMapping)
[概 要] 多重起動を許可するかチェックします。 |
protected boolean |
isInvokeThread(String elementId,
String eventType)
[概 要] 多重起動抑制管理に登録されているIDかをチェックします。 |
protected void |
removeInvokeThread(String elementId,
String eventType)
[概 要] 多重起動抑制管理から対象となるエレメントIDを削除します。 |
ParameterMapping |
runAction(Class<? extends Action> actionClass,
ParameterMapping parameterMapping)
[概 要] イベントに対応するアクションを実行します。 |
Object |
runModel(Model model,
ParameterMapping parameterMapping)
[概 要] モデルを単体実行します。 |
void |
runModels(List<Class<? extends Model>> modelClasses,
ParameterMapping parameterMapping,
int executeIndex,
ModelProcessEvent modelProcessEvent)
[概 要] アクションで予約されたモデル郡をインスタンス化して連続実行します。 |
void |
runModelsAndNoWait(List<Class<? extends Model>> modelClasses,
ParameterMapping parameterMapping)
[概 要] アクションで予約されたモデル郡をインスタンス化して連続実行します。 |
void |
runModelWithProcessListener(Model model,
ModelProcessListener listener,
ParameterMapping parameterMapping)
[概 要] モデルを単体実行します。 |
void |
setClientConfig(ClientConfig clientConfig)
[概 要] フレームワークの挙動情報を保持するオブジェクトを設定します。 |
void |
setClientLogger(Log clientLogger)
[概 要] クライアントログ発行オブジェトを設定します。 |
void |
setErrorElementSnapshot(ElementSnapshot errorElementSnapshot)
[概 要] バリデーションエラーが発生したエレメントのエラー前クローン保存領域を設定します。 |
void |
setEventBinder(EventBinder eventBinder)
[概 要] イベント紐付けオブジェクトを設定します。 |
void |
setPermanent(Map<Object,Object> Permanent)
[概 要] アプリ起動~終了まで存在するデータ保存領域を設定します。 |
protected void |
trap(Throwable e)
[概 要] MVC各レイヤで発生した例外が最終的にハンドリングされるメソッドです。 |
クラス com.nexaweb.client.mco.AbstractMco から継承されたメソッド |
---|
getName, getSession, removedFromContainer, setSession, unload |
クラス java.lang.Object から継承されたメソッド |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
フィールドの詳細 |
---|
public static final String HANDLER_ENTRY_POINT
コンストラクタの詳細 |
---|
public BaseController()
[概 要]
デフォルトコンストラクタです。[詳 細]
コントローラの初期化を行います。
を行った後、イベント紐付け登録読込みの為、bind(EventBinder)
メソッドを
テンプレートコールします。
[備 考]
メソッドの詳細 |
---|
public EventBinder getEventBinder()
[概 要]
イベント紐付けオブジェクトを取得します。[詳 細]
eventBinderフィールドオブジェクトを返却します。[備 考]
public void setEventBinder(EventBinder eventBinder)
[概 要]
イベント紐付けオブジェクトを設定します。[詳 細]
eventBinderフィールドオブジェクトを設定します。[備 考]
eventBinder
- イベント紐付けオブジェクトpublic Map<Object,Object> getPermanent()
[概 要]
アプリ起動~終了まで存在するデータ保存領域を取得します。[詳 細]
permanentフィールドオブジェトを返却します。[備 考]
public void setPermanent(Map<Object,Object> Permanent)
[概 要]
アプリ起動~終了まで存在するデータ保存領域を設定します。[詳 細]
permanentフィールドオブジェクトを設定します。[備 考]
permanent
- アプリ起動~終了まで存在するデータ保存領域public ElementSnapshot getErrorElementSnapshot()
[概 要]
バリデーションエラーが発生したエレメントのエラー前クローン保存領域を取得します。[詳 細]
errorElementSnapshotフィールドオブジェクトを返却します。[備 考]
public void setErrorElementSnapshot(ElementSnapshot errorElementSnapshot)
[概 要]
バリデーションエラーが発生したエレメントのエラー前クローン保存領域を設定します。[詳 細]
errorElementSnapshotフィールドオブジェクトを設定します。[備 考]
errorElementSnapshot
- バリデーションエラーが発生したエレメントのエラー前クローン保存領域public Log getClientLogger()
[概 要]
クライアントログ発行オブジェトを取得します。[詳 細]
clientLoggerフィールドを返却します。[備 考]
public void setClientLogger(Log clientLogger)
[概 要]
クライアントログ発行オブジェトを設定します。[詳 細]
clientLoggerフィールドを引数clientLoggerで設定します。[備 考]
clientLogger
- public ClientConfig getClientConfig()
[概 要]
フレームワークの挙動情報を保持するオブジェクトを取得します。[詳 細]
clientConfigフィールドを返却します。[備 考]
public void setClientConfig(ClientConfig clientConfig)
[概 要]
フレームワークの挙動情報を保持するオブジェクトを設定します。[詳 細]
clientConfigフィールドを引数clientConfigで設定します。[備 考]
clientConfig
- フレームワークの挙動情報を保持するオブジェクトpublic void addedToContainer(Container container, String name)
[概 要]
ui DOMに対して、イベントハンドラ属性の登録を行うエレメント挿抜監視リスナを登録します。[詳 細]
AbstractMco#addedToContainerをオーバーライドします。このタイミングで、出来上がったDocumentに対してStructureChangeListenerを追加、 NexawebによるDOMへのエレメント挿抜を監視します。
【エレメント挿入イベント時】
追加エレメントのname属性を調べ、イベント紐付け情報(EventBinder)から登録されている
イベントタイプ(onCommand等)を取り出します。
登録イベントが有った場合は追加エレメントに属性追加します。
この際の属性値、即ちイベントハンドラはBaseController#handlerFacadeで統一されます。
例)<button onCommand="mco:controller.handlerFacade()"/>
【エレメント削除イベント時】
[備 考]
ContainerLifecycleObject
内の addedToContainer
AbstractMco
内の addedToContainer
protected void initialize(ClientConfig config)
[概 要]
初期化処理が記述可能なメソッドです。[詳 細]
Document、ClientSessionが生成されるタイミングでテンプレートコールされます。 デフォルトの処理は有りません。[備 考]
業務固有の初期化処理が必要な場合は、具象コントローラ内でこのメソッドを オーバーライドして下さい。 又、Reffiの挙動設定をこのタイミングで設定することが出来ます。
使用例)
protected void initialize(ClientConfig config){ // バリデーションエラー時に背景色とツールチップの変更を行わないようにする config.setComponentColorAndTipChangeOnValidationFault(false); // クライアントログをローカルファイルに残す(Applet実行時、要デジタル署名) config.setEnableLogConsumer(true); config.setLogConsumerClass(FileLogConsumer.class); config.setLogFileDir("operation_log"); config.setLogFileNamePrefix("abc-system-client-"); // Reffiに「ウィンドウ」として認識させるエレメントを追加する config.addWindowLevelElementDefinition("customWindow"); }
public void handlerFacade()
[概 要]
全ユーザ定義イベントをハンドルする入り口になるメソッドです。[詳 細]
発生したイベントタイプ、イベントを起こしたコンポーネント名を元に、invoke(Class, ParameterMapping)
に処理委譲します。
[備 考]
bind(EventBinder)
で定義したイベントは全てこのメソッドがハンドリングします。
MCOを追加開発していくスタイルの場合、UIからのイベントハンドリングエントリポイントは
分散されますが、Reffiを使用したアプリケーションでは統一されます。
protected final boolean isDuplicateActionInvoke(ParameterMapping parameterMapping)
[概 要]
多重起動を許可するかチェックします。[詳 細]
ClientConfig
にて
設定されている多重起動抑制フラグ、及び特定のエレメント名+イベント種別で登録されている多重起動
許可エレメントのチェックを行い、どちらかにて許可されている場合はtrue、それ以外はfalseを返します。
[備 考]
parameterMapping
- パラメータ情報protected final boolean isInvokeThread(String elementId, String eventType)
[概 要]
多重起動抑制管理に登録されているIDかをチェックします。[詳 細]
多重起動抑制を設定している場合のみ、内部にて処理が実行されます。[備 考]
elementId
- 多重起動抑制対象となるエレメントIDeventType
- 多重起動抑制対象となるイベント種別protected final void addInvokeThread(String elementId, String eventType)
[概 要]
多重起動抑制管理に登録をします。[詳 細]
多重起動抑制を設定している場合のみ、内部にて処理が実行されます。[備 考]
elementId
- 多重起動抑制対象となるエレメントIDeventType
- 多重起動抑制対象となるイベント種別protected final void removeInvokeThread(String elementId, String eventType)
[概 要]
多重起動抑制管理から対象となるエレメントIDを削除します。[詳 細]
多重起動抑制を設定している場合のみ、内部にて処理が実行されます。invoke(Class, ParameterMapping)
内にてActionの途中終了、
Action実行時の例外発生、及びモデルの終了イベント時に共通で呼び出される必要があります。
[備 考]
invoke(Class, ParameterMapping)
のfinallyでは呼び出しは行いません。
elementId
- 多重起動抑制対象となるエレメントIDeventType
- 多重起動抑制対象となるイベント種別protected ParameterMapping createParameterMapping()
[概 要]
MVC各レイヤを巡回するParameteraMappingオブジェクトを生成、初期化します。[詳 細]
イベント発生の際、Controller、Action、Modelを流れるデータマップを作成します。
[備 考]
public final Object invoke(Class<? extends Action> actionClass, ParameterMapping parameterMapping)
[概 要]
コントローラの主幹メソッドです。[詳 細]
コントローラ処理フローの幹を形成します。 このメソッドのtryスコープで以下が行われます。createParameterMapping()
MVCレイヤを巡回するParameterMappingオブジェクトの生成runAction(Class, ParameterMapping)
アクションの実行runModels(List, ParameterMapping, int, ModelProcessEvent)
or runModelsAndNoWait(List, ParameterMapping)
アクションで予約されたモデル群の実行
[備 考]
event
- 画面コンポーネントから発生したイベントオブジェクトparameterMapping
- MVC各レイヤを伝播するパラメータオブジェクトpublic ParameterMapping runAction(Class<? extends Action> actionClass, ParameterMapping parameterMapping) throws Exception
[概 要]
イベントに対応するアクションを実行します。[詳 細]
引数で指定されたアクションクラス型をインスタンス化、 実行(BaseAction.run(ParameterMapping)
)します。[備 考]
この結果がnullだった場合はコントローラの以降の処理は中止されます。BaseAction.run(ParameterMapping)
がnullを返却するのは、
prepareがfalseを返却、もしくはvalidate結果がエラーだった場合があります。
actionClass
- 実行するアクションクラスの型parameterMapping
- MVCを巡回するパラメータマッピング
Exception
public void runModels(List<Class<? extends Model>> modelClasses, ParameterMapping parameterMapping, int executeIndex, ModelProcessEvent modelProcessEvent) throws Exception
[概 要]
アクションで予約されたモデル郡をインスタンス化して連続実行します。[詳 細]
BaseAction.reserveModels(List)
で予約されたBaseModel実装モデル群を実行します。
モデル実行直前にBaseAction.nextModel(int, ModelProcessEvent, Model)
がコールバックされます。
実行モデルへのパラメータ設定を上記メソッドで行うことが出来ます。
モデル実行後、成功時はBaseAction.successForward(int, Model, Object)
が、
失敗時はBaseAction.failureForward(int, Model, Exception)
がコールバックされます。
モデルの実行結果は上記メソッドで取得することが出来ます。
[備 考]
BaseAction.isRunModelsAndNoWait()
がfalseの場合、同期モードで実行されます。
modelClasses
- BaseAction.reserveModels(List)
で予約されたモデルクラス群parameterMapping
- MVC各レイヤを伝播するパラメータexecuteIndex
- モデル実行順序インデックスmodelProcessEvent
- 直前に実行したモデルの処理結果イベントオブジェクト
Exception
- モデル内で発生し得る例外public void runModelsAndNoWait(List<Class<? extends Model>> modelClasses, ParameterMapping parameterMapping) throws Exception
[概 要]
アクションで予約されたモデル郡をインスタンス化して連続実行します。[詳 細]
BaseAction.reserveModels(List)
で予約されたBaseModel実装モデル群を実行します。BaseAction.nextModel(int, ModelProcessEvent, Model)
がコールバックされます。
モデル実行後、成功時はBaseAction.successForward(int, Model, Object)
が、
失敗時はBaseAction.failureForward(int, Model, Exception)
がコールバックされます。
モデルの実行結果は上記メソッドで取得することが出来ます。
[備 考]
BaseAction.isRunModelsAndNoWait()
がtrueの場合、非同期モードで実行されます。BaseAction.isRunModelsAndNoWait()
を
オーバーライドしてtrueを返却して下さい。@Override protected boolean isRunModelsAndNoWait() { return true; }
modelClasses
- BaseAction.reserveModels(List)
で予約されたモデルクラス群parameterMapping
- MVC各レイヤを伝播するパラメータオブジェクト
Exception
- モデル内で発生し得る例外public Object runModel(Model model, ParameterMapping parameterMapping) throws Exception
[概 要]
モデルを単体実行します。[詳 細]
[備 考]
model
- 実行するモデルインスタンスparameterMapping
- MVC各レイヤを伝播するパラメータオブジェクト
Exception
public void runModelWithProcessListener(Model model, ModelProcessListener listener, ParameterMapping parameterMapping) throws Exception
[概 要]
モデルを単体実行します。[詳 細]
[備 考]
model
- 実行するモデルインスタンスlistener
- モデル処理結果リスナparameterMapping
- MVC各レイヤを伝播するパラメータオブジェクト
Exception
protected void trap(Throwable e)
[概 要]
MVC各レイヤで発生した例外が最終的にハンドリングされるメソッドです。[詳 細]
[備 考]
e
- MVC各レイヤで発生したスロー可能オブジェクトprotected void errorDialog(String title, String message)
[概 要]
エラーダイアログ表示を行います。[詳 細]
指定されたタイトルとメッセージでダイアログ表示を行います。[備 考]
title
- エラーダイアログ タイトルmessage
- エラーダイアログ 表示メッセージprotected void bind(EventBinder eventBinder)
[概 要]
xalで定義されたエレメントと、アクションを紐付けるメソッドです。[詳 細]
[備 考]
eventBinder.addEventBinding("name属性値", "イベントタイプ", BaseAction継承クラス);
eventBinder
- イベント紐付けオブジェクトprotected void handlerFinalize(ParameterMapping mapping)
[概 要]
各ユーザ定義イベントハンドリングの最後にテンプレートコールされるメソッドです。[詳 細]
デフォルト処理は有りません。[備 考]
このメソッドを具象コントローラでオーバーライドすると、全イベントアクションの 共通最終処理を実装出来ます。
mapping
- MVC各レイヤを伝播するパラメータオブジェクト
|
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |