|
||||||||||
| 前 次 | フレームあり フレームなし | |||||||||
参照先:
説明
| Server | |
|---|---|
| jp.co.fujitsu.reffi.server.util | |
| jp.co.fujitsu.reffi.server.web.filter | |
このドキュメントはMVCフレームワーク「Reffi(Nexaweb版)」のAPI仕様書です。
構成をView(xal + Action)、Controller、Modelに分けることで、 出来上がる成果物が自然に機能レイヤ分け、パッケージ分けされます。
xalの開発、業務ロジックの開発を分離することで、デザイナとプログラマの分業が図れるようになります。
業務ロジックが決められたシステムロジックに沿って処理されることで、
処理フロー設計を省略出来ることを目指しています。
又、決められたメソッドのオーバーライドによる業務ロジックの実装は、
メソッド名の命名等、地味ながらレビュー時コストが掛かる作業を省きます。
|
←制御 |
|
→実行 |
|
||||||
| ↑継承 | ↑継承 | ↑継承 | ||||||||
|
|
|
「controller」というidでBaseControllerを継承した具象コントローラをMCO登録します。
(このケースではdemo.client.controllerパッケージのDemoControllerクラスとしています。)
具象コントローラはアプリケーション内で唯一のMCOとなります。以降、コントローラの登録作業は発生しません。
<xal xmlns="http://openxal.org/ui/java">
<mco:mco xmlns:mco="http://openxal.org/core/mco" id="controller" src="demo.client.controller.DemoController"/>
<rootPane>
<window name="hwWindow" height="300px" title="Hello World Window" width="300px" x="10px" y="10px">
<freePane>
<button name="hwWindow.btnHelloWorld" height="25px" text="Hello World" width="100px" x="80px" y="20px"/>
<label name="hwWindow.lblHelloWorld" height="20px" width="100px" x="80px" y="80px"/>
</freePane>
</window>
</rootPane>
</xal>
この例ではControllerの他、hwWindowという名前のウィンドウ、hwWindow.hwHelloWorldという名前のボタン、
hwWindow.lblHellowWorldという名前のラベルを配置しています。
1で登録記述した具象コントローラを作成します。
BaseControllerを継承したクラスとして作成して下さい。
package demo.client.controller;
import jp.co.fujitsu.reffi.client.nexaweb.controller.BaseController;
public class DemoController extends BaseController {
}
BaseControllerはAbstractMcoを継承したクラスです。
bindメソッドをオーバーライドして、引数EventBinderに対してイベント登録を行います。
下記例は、1で配置したhwWindow.btnHelloWorldボタンが押下されると、HelloWorldActionが起動される紐付けを定義しています。
package demo.client.controller;
import jp.co.fujitsu.reffi.client.nexaweb.controller.BaseController;
import jp.co.fujitsu.reffi.client.nexaweb.controller.EventBinder;
import demo.client.menu.action.HelloWorldAction;
public class DemoController extends BaseController {
@Override
protected void bind(EventBinder eventBinder) {
// 「hwWindow.btnHelloWorld」エレメントが「onCommand」イベントを発行すると「HelloWorldActionクラス」が起動する紐付けを行います
eventBinder.addEventBinding("hwWindow.btnHelloWorld", "onCommand", HelloWorldAction.class);
}
}
これでエレメント、イベントタイプ、起動アクションの紐付け登録が行われました。
最後に、イベント発生時実際に起動するアクションクラスを作成します。 アクションクラスはBaseActionを継承して作成します。
package demo.client.helloworld.action;
import jp.co.fujitsu.reffi.client.nexaweb.action.BaseAction;
import jp.co.fujitsu.reffi.client.nexaweb.controller.ParameterMapping;
import com.nexaweb.xml.Element;
public class HelloWorldAction extends BaseAction {
// 汎用イベントハンドルメソッド、prepareをオーバーライドします。
@Override
protected boolean prepare(ParameterMapping prepareMapping) throws Exception {
// アクションを起こしたコンポーネントが存在するウィンドウからラベルエレメントを取ります。
Element lblHelloWorld = getElementByNameFromOwnWindow("hwWindow.lblHelloWorld");
// ラベルエレメントに対して「Hello World」テキスト属性を設定します。
lblHelloWorld.setAttribute("text", "Hello World");
return true;
}
}
prepareメソッドはモデル実行前の前処理や、エレメント操作等のクライアント内で完結する処理等、
汎用的なイベントハンドリングメソッドとして使用出来ます。
以上で一イベントの処理実装は終了です。イベントが増える毎に3~4を繰り返します。
このケースではモデルは使用していません。HTTP通信等の機能モデルを使用した業務処理を実装する場合は、
別途当リファレンス内のサンプルを参照して下さい。
|
||||||||||
| 前 次 | フレームあり フレームなし | |||||||||