Packagejp.co.fujitsu.reffi.client.flex.controller
Classpublic class BaseController
InheritanceBaseController Inheritance flash.events.EventDispatcher
Implements mx.core.IMXMLObject, IController

[概 要]

アクションとモデルを制御する基底コントローラクラスです.

[詳 細]

コントローラは大きく分けて二つの役割を担います。
  1. コンポーネント、イベント、アクションの紐付け BaseControllerを継承した具象コントローラクラスのbind(EventBinder)をオーバーライド実装することで、 コンポーネント、イベント、アクションの紐付けを行います。 画面表示リストに該当のコンポーネントが挿入された時、紐付けられた情報を元にイベントリスナ、 ハンドラ登録を行います。
  2. イベント発生時の処理フロー形成 1で登録されたイベントが発生した時、handlerFacade()が全てのイベントハンドリングの 入り口となります。 イベント処理を委譲されたBaseControllerは以下の処理フローを作ります。
    	 	                     
    実行順序BaseActionBaseControllerBaseModel
    1 handlerFacade() 
    2  invoke() 
    3   runAction() 
    4run()  
    5   runModels() 
       runModelsAndNoWait() 
    6  run()
    7   モデル処理監視リスナ(成功) 
    8successForward()  
       モデル処理監視リスナ(失敗) 
    failureForward()  
    9   trap() 
    10   handlerFinalize() 
    11 modelsDone() 
    12complete() 
    この過程で呼ばれるアクション(run)とモデル(run)の中では別途処理フローが作られ、 機能実装者にフックポイントを提供します。

[備 考]

View the examples



Public Properties
 PropertyDefined By
  application : Application
[概 要] このコントローラが制御するmx:Applicationインスタンスです.
BaseController
  clientConfig : ClientConfig
[static] [概 要] フレームワークの挙動情報を保持するオブジェクトです.
BaseController
  controllers : Dictionary
[static] [概 要] AVMにロードされているBaseController継承オブジェクト群を保持するオブジェクトです.
BaseController
  eventBinder : EventBinder
[概 要] 一アプリケーション(一SWF)内のイベント定義情報が格納されたオブジェクトです.
BaseController
  name : String
[概 要] このコントローラの名前です。デフォルトではクラス型名が入ります.
BaseController
  permanent : Dictionary
[概 要] nアプリケーション(nSWF)間で共有可能な恒久領域です.
BaseController
Public Methods
 MethodDefined By
  
[概 要] デフォルトコンストラクタです.
BaseController
  
getController(application:Application):BaseController
[static] [概 要] 引数applicationを管理しているBaseControllerインスタンスを返却します.
BaseController
  
handlerFacade(event:Event):void
[概 要] 全ユーザ定義イベントをハンドルする入り口になるメソッドです.
BaseController
  
initialized(document:Object, id:String):void
[概 要] このコントローラタグがApplicationの子要素としてパースされた時点でAVMによってコールバックされるメソッドです.
BaseController
  
invoke(actionClass:Class, parameterMapping:ParameterMapping, completeHandler:Function = null, failureHandler:Function = null):void
[概 要] コントローラの主幹メソッドです.
BaseController
  
removeEvents(event:Event):void
[概 要] 削除された画面コンポーネントに付与されているイベントリスナを削除します.
BaseController
  
runAction(actionClass:Class, parameterMapping:ParameterMapping):ParameterMapping
[概 要] イベントに対応するアクションを実行します.
BaseController
  
runModel(model:BaseModel, parameterMapping:ParameterMapping):void
[概 要] 機能モデルを単体実行します.
BaseController
  
runModels(models:Array, mapping:ParameterMapping, index:int = 0, modelProcessEvent:ModelProcessEvent = null):void
[概 要] アクションで予約されたモデル群をインスタンス化して連続実行します.
BaseController
  
runModelsAndNoWait(models:Array, mapping:ParameterMapping):void
[概 要] アクションで予約されたモデル群をインスタンス化して連続実行します.
BaseController
  
trap(error:*):void
[概 要] Controller、Action、Model各レイヤで発生したエラーを最終的に一元ハンドルするメソッドです.
BaseController
Protected Methods
 MethodDefined By
  
bind(eventBinder:EventBinder):void
[概 要] MXMLで定義されたコンポーネントと、アクションを紐付けるメソッドです.
BaseController
  
[概 要] MVC各レイヤを巡回するParameteraMappingオブジェクトを生成、初期化します.
BaseController
  
handlerFinalize(parameterMapping:ParameterMapping):void
[概 要] 各ユーザ定義イベントハンドリングの最後にテンプレートコールされるメソッドです.
BaseController
  
initialize(clientConfig:ClientConfig):void
[概 要] 初期化処理が記述可能なメソッドです.
BaseController
  
modelsDone(parameterMapping:ParameterMapping):void
[概 要] 1アクションに登録されている機能モデル群が全て終了した契機でコールされます.
BaseController
Property Detail
applicationproperty
application:Application

[概 要]

このコントローラが制御するmx:Applicationインスタンスです.

[詳 細]

このコントローラを記述したタグの親ノードとなるApplicationを示すプロパティです。
            <?xml version="1.0" encoding="utf-8"?>
            <mx:Application name="testApp" 
                xmlns:mx="http://www.adobe.com/2006/mxml" 
                xmlns:controller="demo.client.controller.*">
                
                <controller:TestController name="testController" />
                      :
                      :
         
上記の場合、applicationプロパティにはtestAppインスタンスが格納されます。

[備 考]


Implementation
    public function get application():Application
    public function set application(value:Application):void
clientConfigproperty 
clientConfig:ClientConfig

[概 要]

フレームワークの挙動情報を保持するオブジェクトです.

[詳 細]

コントローラ初期化時(BaseController#initilize())に引数として渡るオブジェクトです。 initialize内で動作の制御を設定します。

[備 考]


Implementation
    public static function get clientConfig():ClientConfig
    public static function set clientConfig(value:ClientConfig):void
controllersproperty 
controllers:Dictionary

[概 要]

AVMにロードされているBaseController継承オブジェクト群を保持するオブジェクトです.

[詳 細]

A.swf(AControllerクラスが管理)とB.swf(BControllerクラスが管理)が読み込まれている場合、 以下のようにコントローラインスタンスが保持されます。
		 controllers:Dictionary
		     "AControllerのnameプロパティ値" = AController instance
		     "BControllerのnameプロパティ値" = BController instance
		 

[備 考]


Implementation
    public static function get controllers():Dictionary
    public static function set controllers(value:Dictionary):void

See also

eventBinderproperty 
eventBinder:EventBinder

[概 要]

一アプリケーション(一SWF)内のイベント定義情報が格納されたオブジェクトです.

[詳 細]

[備 考]


Implementation
    public function get eventBinder():EventBinder
    public function set eventBinder(value:EventBinder):void

See also

nameproperty 
name:String

[概 要]

このコントローラの名前です。デフォルトではクラス型名が入ります.

[詳 細]

AVM上に複数のSWF(Application)がロードされる場合、Applicationを管理する コントローラを識別する為のキーとして使用されます。

[備 考]

読み込まれる各SWFを管理するコントローラクラス名が同一である場合、 コントローラを識別することが出来ません。 作成する具象コントローラは可能な限り別クラス名にするか、 もしくはinitialize時にユニークなnameプロパティを設定してください。


Implementation
    public function get name():String
    public function set name(value:String):void

See also

permanentproperty 
permanent:Dictionary

[概 要]

nアプリケーション(nSWF)間で共有可能な恒久領域です.

[詳 細]

A.swfとB.swfが読み込まれている場合、AControllerとBControllerで同じ領域が参照されます。

[備 考]


Implementation
    public function get permanent():Dictionary
    public function set permanent(value:Dictionary):void
Constructor Detail
BaseController()Constructor
public function BaseController()

[概 要]

デフォルトコンストラクタです.

[詳 細]

describeType(this)の結果、取得するXMLのtypeノードからname属性を取り出します。 取り出したname属性はクラス型名のみ切り出します。 取得されたクラス名はnameプロパティに設定されます。

[備 考]

nameプロパティに設定された名前は、BaseController#controllersに格納される、 このコントローラオブジェクトのキーになります。

Method Detail
bind()method
protected function bind(eventBinder:EventBinder):void

[概 要]

MXMLで定義されたコンポーネントと、アクションを紐付けるメソッドです.

[詳 細]

具象コントローラでこのメソッドをオーバーライドして、コンポーネントのイベント発生時に 実行するアクションクラスを紐付けます。 eventBinder.addEventBinding("name属性値", "イベントタイプ", BaseAction継承クラス); のように紐付け処理を列挙して下さい。 紐付け情報を保持するEventBinderオブジェクトは、BaseControllerのeventBinderプロパティ として保持されます。

[備 考]

Parameters

eventBinder:EventBinder — イベント紐付け情報保持オブジェクト

See also


Example
name属性値loginを持つコンポーネントがクリックされるとLoginActionが起動する紐付け処理
            eventBinder.addEventBinding("login", MouseEvent.CLICK, Class(LoginAction));
         
createParameterMapping()method 
protected function createParameterMapping(event:Event):ParameterMapping

[概 要]

MVC各レイヤを巡回するParameteraMappingオブジェクトを生成、初期化します.

[詳 細]

イベント発生の際、Controller、Action、Modelを流れるデータマップを作成します。 このメソッドが呼ばれるフロー段階では発生したEventオブジェクト、 イベント発生させたオブジェクト等が初期値として設定されます。

[備 考]

Parameters

event:Event

Returns
ParameterMapping — MVC各レイヤを巡回するパラメータオブジェクト
getController()method 
public static function getController(application:Application):BaseController

[概 要]

引数applicationを管理しているBaseControllerインスタンスを返却します.

[詳 細]

controllersプロパティを走査して引数applicationと同じapplicationを持つ コントローラを返却します。

[備 考]

Parameters

application:Application — コントローラを識別する為のApplicationオブジェクト

Returns
BaseController
handlerFacade()method 
public function handlerFacade(event:Event):void

[概 要]

全ユーザ定義イベントをハンドルする入り口になるメソッドです.

[詳 細]

発生したイベントタイプ、イベントを起こしたコンポーネント名を元に、 イベント紐付けオブジェクト(EventBinder)から対応するアクションクラス型を取得します。 取得したアクションクラス型を引数にしてinvoke(Class, ParameterMapping)に処理委譲します。

[備 考]

bind(EventBinder)で定義したイベントは全てこのメソッドがハンドリングします。

Parameters

event:Event — 発生イベント

handlerFinalize()method 
protected function handlerFinalize(parameterMapping:ParameterMapping):void

[概 要]

各ユーザ定義イベントハンドリングの最後にテンプレートコールされるメソッドです.

[詳 細]

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

[備 考]

このメソッドを具象コントローラでオーバーライドすると、全イベントアクションの 共通実行後処理を実装出来ます。

Parameters

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

initialize()method 
protected function initialize(clientConfig:ClientConfig):void

[概 要]

初期化処理が記述可能なメソッドです.

[詳 細]

具象コントローラがApplicationの子要素として認識されたタイミングでテンプレートコールされます。 デフォルトの処理は有りません。

[備 考]

業務固有の初期化処理が必要な場合は、具象コントローラ内でこのメソッドをオーバーライドして下さい。 又、フレームワークの挙動設定をこのタイミングで設定することが出来ます。

Parameters

clientConfig:ClientConfig — フレームワーク挙動情報を保持するオブジェクトです


Example
              override protected function initialize(clientConfig:ClientConfig):void {
                 
                  // アクションでモデル予約が無かった場合に動作させるデフォルトモデルクラスを設定
                  clientConfig.defaultModelClass = Class(DemoSystemDefaultModel);
         
                  // エラー発生時にコントローラによるエラー表示を抑止する
                  clientConfig.showAlertOnError = false;
              }
         
initialized()method 
public final function initialized(document:Object, id:String):void

[概 要]

このコントローラタグがApplicationの子要素としてパースされた時点でAVMによってコールバックされるメソッドです.

[詳 細]

このコントローラの親要素であるApplication、及びApplicationを管理するSystemManagerに対して、 ADDEDイベント(ハンドラ:bindEvents)、REMOVEDイベント(ハンドラ:removeEvents)リスナを追加します。 その他、nameプロパティへの値設定(クラス名を設定)、initializeメソッドのテンプレートコールを行います。

[備 考]

Parameters

document:Object — このコントローラがタグとして配置されたApplication
 
id:String — タグとして配置されたコントローラのid属性値

invoke()method 
public function invoke(actionClass:Class, parameterMapping:ParameterMapping, completeHandler:Function = null, failureHandler:Function = null):void

[概 要]

コントローラの主幹メソッドです.

[詳 細]

コントローラ処理フローの幹を形成します。 このメソッドのtryスコープで以下が行われます。
  1. runAction(Class, ParameterMapping) アクションの実行
  2. runModels(Array, ParameterMapping, int, ModelProcessEvent) or runModelsAndNoWait(Array, ParameterMapping) アクションで予約されたモデル群の実行
上記の処理中に例外が発生した場合、trapメソッドがテンプレートコールされます。 最終的にfinallyスコープに入るとhanderFinalizeメソッドがテンプレートコールされます。 イベントハンドリング時では無く、任意にアクションを起動する場合、 第3引数completeHandler、第4引数failureHanlerを指定すると、 invokeの成功、失敗をアクションの外部からハンドル出来ます。 指定されたcompleteHandlerはアクション#completeが実行された後、 failureHanlderはアクション#failureForwardが実行された後のタイミングで実行されます。

[備 考]

Parameters

actionClass:Class — 画面コンポーネントから発生したイベントオブジェクト
 
parameterMapping:ParameterMapping — MVC各レイヤを伝播するパラメータオブジェクト
 
completeHandler:Function (default = null) — invoke成功時に呼ばれる関数(デフォルト:null)
 
failureHandler:Function (default = null) — invoke失敗時に呼ばれる関数(デフォルト:null)

modelsDone()method 
protected function modelsDone(parameterMapping:ParameterMapping):void

[概 要]

1アクションに登録されている機能モデル群が全て終了した契機でコールされます.

[詳 細]

アクションでの登録モデル群が全て完了した時の共通処理を記述します。

[備 考]

Parameters

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

removeEvents()method 
public function removeEvents(event:Event):void

[概 要]

削除された画面コンポーネントに付与されているイベントリスナを削除します.

[詳 細]

削除されたコンポーネントがeventBinderプロパティに登録されているname属性を持つ場合、 this.handlerFacade(event:Event)を呼ぶイベントリスナを削除します。

[備 考]

Parameters

event:Event — このコントローラが管理するAppicationからコンポーネントが削除されたremovedイベント

runAction()method 
public function runAction(actionClass:Class, parameterMapping:ParameterMapping):ParameterMapping

[概 要]

イベントに対応するアクションを実行します.

[詳 細]

引数で指定されたアクションクラス型をインスタンス化、 実行(BaseAction#run(ParameterMapping))します。 execute実行後、結果戻り値であるParameterMappingを返却します。

[備 考]

この結果がnullだった場合はコントローラの以降の処理は中止されます。 BaseAction#run(ParameterMapping)がnullを返却するのは、 prepareがfalseを返却、もしくはvalidate結果がエラーだった場合があります。

Parameters

actionClass:Class — 実行するアクションクラスの型
 
parameterMapping:ParameterMapping — MVCを巡回するパラメータマッピング

Returns
ParameterMapping — アクション実行後のParameterMappingオブジェクト
runModel()method 
public function runModel(model:BaseModel, parameterMapping:ParameterMapping):void

[概 要]

機能モデルを単体実行します.

[詳 細]

BaseAction#reserveModels等で登録した以外のモデルを実行する際に使用します。

[備 考]

Parameters

model:BaseModel — 実行する機能モデルインスタンス
 
parameterMapping:ParameterMapping — MVC各レイヤを伝播するパラメータオブジェクト

runModels()method 
public function runModels(models:Array, mapping:ParameterMapping, index:int = 0, modelProcessEvent:ModelProcessEvent = null):void

[概 要]

アクションで予約されたモデル群をインスタンス化して連続実行します.

[詳 細]

BaseAction#reserveModels(Array)で予約されたBaseModel実装モデル群を実行します。 登録モデルが複数有る場合、前回モデルの実行終了を待ってから次回モデルが実行されます。 モデル実行直前にBaseAction#nextModel(int, ModelProcessEvent, Model)がコールバックされます。 実行モデルへのパラメータ設定を上記メソッドで行うことが出来ます。 モデル実行後、成功時はBaseAction#successForward(int, Model, Object)が、 失敗時はBaseAction#failureForward(int, Model, Exception)がコールバックされます。 モデルの実行結果は上記メソッドで取得することが出来ます。

[備 考]

BaseAction#isRunModelsAndNoWait() がfalseの場合、同期モードで実行されます。 同メソッドはデフォルトでfalseを返却します。

Parameters

models:Array — BaseAction#reserveModels(Array) で予約されたモデルクラス群
 
mapping:ParameterMapping — MVC各レイヤを伝播するパラメータ
 
index:int (default = 0) — モデル実行順序インデックス
 
modelProcessEvent:ModelProcessEvent (default = null) — 直前に実行したモデルの処理結果イベントオブジェクト

See also

runModelsAndNoWait()method 
public function runModelsAndNoWait(models:Array, mapping:ParameterMapping):void

[概 要]

アクションで予約されたモデル群をインスタンス化して連続実行します.

[詳 細]

BaseAction#reserveModels(Array)で予約されたBaseModel実装モデル群を実行します。 登録モデルが複数有る場合、前回モデルの実行終了を待たずに次回モデルが実行されます。 モデル実行直前にBaseAction#nextModel(int, ModelProcessEvent, Model)がコールバックされます。 実行モデルへのパラメータ設定を上記メソッドで行うことが出来ます。 非同期モードでモデル実行した場合は前回モデルの結果を待たずに次回モデルを実行する為、 第二引数prev:ModelProcessEventが常時nullになります。 前回モデルの結果を判断して、次回モデルのパラメータ設定をすることは出来ません。 モデル実行後、成功時はBaseAction#successForward(int, Model, Object)が、 失敗時はBaseAction#failureForward(int, Model, Exception)がコールバックされます。 モデルの実行結果は上記メソッドで取得することが出来ます。

[備 考]

BaseAction#isRunModelsAndNoWait() がtrueの場合、非同期モードで実行されます。 非同期モードで実行する場合は、BaseAction#isRunModelsAndNoWait()を オーバーライドしてtrueを返却して下さい。

Parameters

models:Array — BaseAction#reserveModels(Array) で予約されたモデルクラス群
 
mapping:ParameterMapping — MVC各レイヤを伝播するパラメータオブジェクト

See also


Example
             override protected function isRunModelsAndNoWait():Boolean {
                return true;
             }
         
trap()method 
public function trap(error:*):void

[概 要]

Controller、Action、Model各レイヤで発生したエラーを最終的に一元ハンドルするメソッドです.

[詳 細]

MVC各レイヤで発生したエラーが最終的にキャッチされます。 ClientConfigオブジェクトのshowAlertOnErrorプロパティがtrueの場合、 発生したエラーの情報を画面表示します。

[備 考]

Parameters

error:* — 発生したエラー、またはエラーイベント

Examples
典型的な具象コントローラ(BaseController継承クラス)
        package demo.client.controller {
            import demo.client.chat.action.ChannelStartAction;
            import demo.client.chat.action.ChannelStopAction;
            import demo.client.chat.action.ChatWindowCloseAction;
            import demo.client.chat.action.EnterChannelAction;
            import demo.client.chat.action.LeaveChannelAction;
            import demo.client.chat.action.RemarkSendAction;
            import demo.client.componentSearch.action.ComponentSearchCreationCompleteAction;
            import demo.client.componentSearch.action.SearchAction;
            import demo.client.custom.action.AbortRowDataAction;
            import demo.client.custom.action.ChangeColumnAction;
           :
           :
           :

            import flash.events.Event;
            import flash.events.FocusEvent;
            import flash.events.MouseEvent;
            
            import jp.co.fujitsu.reffi.client.flex.controller.BaseController;
            import jp.co.fujitsu.reffi.client.flex.controller.EventBinder;
            
            import mx.events.CloseEvent;
            import mx.events.FlexEvent;
            import mx.events.IndexChangedEvent;
        
            public class DemoController extends BaseController {
            
                 // コントローラ(アプリケーション)初期化処理を実装します 
                override protected function initialize(clientConfig:ClientConfig):void {
                
                }      
                  
                  // コンポーネントイベントとアクションの紐付けを定義します
                override protected function bind(eventBinder:EventBinder):void {
                    // メニュー画面アクション
                    eventBinder.addEventBinding("Index.openTop", MouseEvent.CLICK, Class(demo.client.index.action.ViewStackChangeAction));
                    eventBinder.addEventBinding("Index.openChat", MouseEvent.CLICK, Class(demo.client.index.action.ViewStackChangeAction));
                    eventBinder.addEventBinding("Index.openForm", MouseEvent.CLICK, Class(demo.client.index.action.ViewStackChangeAction));
                    eventBinder.addEventBinding("Index.openWindowGroupMenu", MouseEvent.CLICK, Class(demo.client.index.action.ViewStackChangeAction));
                    eventBinder.addEventBinding("Index.lineupWindows", MouseEvent.CLICK, Class(demo.client.index.action.ViewStackChangeAction));
                    eventBinder.addEventBinding("Index.openServerPush", MouseEvent.CLICK, Class(demo.client.index.action.ViewStackChangeAction));
                    eventBinder.addEventBinding("Index.openPDF", MouseEvent.CLICK, Class(demo.client.index.action.ViewStackChangeAction));
                    eventBinder.addEventBinding("Index.openDataGrid", MouseEvent.CLICK, Class(demo.client.index.action.ViewStackChangeAction));
                    eventBinder.addEventBinding("Index.openWSRequest", MouseEvent.CLICK, Class(demo.client.index.action.ViewStackChangeAction));
                    eventBinder.addEventBinding("Index.openUserInteractive", MouseEvent.CLICK, Class(demo.client.index.action.ViewStackChangeAction));
                    eventBinder.addEventBinding("Index.openComponentSearch", MouseEvent.CLICK, Class(demo.client.index.action.ViewStackChangeAction));
                    eventBinder.addEventBinding("Index.openSpring", MouseEvent.CLICK, Class(demo.client.index.action.ViewStackChangeAction));
                    eventBinder.addEventBinding("Index.blackStyleRadioButton", MouseEvent.CLICK, Class(demo.client.index.action.StyleRadioButtonClickAction));
                    eventBinder.addEventBinding("Index.blueStyleRadioButton", MouseEvent.CLICK, Class(demo.client.index.action.StyleRadioButtonClickAction));
                    eventBinder.addEventBinding("Index.greenStyleRadioButton", MouseEvent.CLICK, Class(demo.client.index.action.StyleRadioButtonClickAction));
                    eventBinder.addEventBinding("Index.grayStyleRadioButton", MouseEvent.CLICK, Class(demo.client.index.action.StyleRadioButtonClickAction));
        
                    // トップ画面
                    eventBinder.addEventBinding("Top.menuLogoImage", FlexEvent.CREATION_COMPLETE, Class(demo.client.top.action.ImageCreationCompleteAction));
                    
                    // チャットデモ画面アクション
                    eventBinder.addEventBinding("chat.channelStartButton", MouseEvent.CLICK, Class(demo.client.chat.action.ChannelStartAction));
                    eventBinder.addEventBinding("chat.channelStopButton", MouseEvent.CLICK, Class(demo.client.chat.action.ChannelStopAction));
                    eventBinder.addEventBinding("chat.enterChannel", MouseEvent.CLICK, Class(demo.client.chat.action.EnterChannelAction));
                    eventBinder.addEventBinding("chat.handleName", FlexEvent.ENTER, Class(demo.client.chat.action.EnterChannelAction));
                    eventBinder.addEventBinding("chat.leaveChannel", MouseEvent.CLICK, Class(demo.client.chat.action.LeaveChannelAction));
                    eventBinder.addEventBinding("chat.remarkSend", MouseEvent.CLICK, Class(demo.client.chat.action.RemarkSendAction));
                    eventBinder.addEventBinding("chat.chatRemark", FlexEvent.ENTER, Class(demo.client.chat.action.RemarkSendAction));
                    eventBinder.addEventBinding("chat.chatWindow", Event.CLOSE, Class(demo.client.chat.action.ChatWindowCloseAction));
        
                }
                 
                // 毎イベント最終共通処理を実装します
                override protected function handlerFinalize(parameterMapping:ParameterMapping):void {
                
                }
            }
        }
     
具象コントローラの登録方法
        <?xml version="1.0" encoding="utf-8"?>
        <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:controller="demo.client.controller.*">
            <controller:DemoController name="demoController" />
                  :
                  :
     

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