PdStrutsことPage-Driven Strutsの概要
長いのでとりあえず仮称でPdStrutsと書いてみます。ぐぐってもヒットしないので、一応ユニークみたいです。
だいぶ固まったのでPdStrutsの概要をぼちぼちと書いてみます。
大変なのであまり細かいことは書かない方向で。
基本アーキテクチャ
ページドリブンです。
って用語でいいのかどうか良くわかりませんが、とりあえずOzStrutsと同じように、基本単位として「ページ」を採用しています。
イメージ的には
Page=Action+ActionForm
という感じです。
厳密にはただのPOJOなActionFormです。
PdStrutsが提供するDispatchPageMethodActionによって、Pageクラスのリスナメソッドが呼び出されることになります。
PageクラスはPOJO
Pageクラスは、S2Strutsの機能を利用してPOJOで実装できます。というかPOJO推奨です。
Pageクラスの構成要素
基本的なPage実装には、
- クライアントから送られてくるフォーム情報を受け取るためのsetterメソッド
- ビューで表示情報を取得するためのgetterメソッド
- クライアントからのリクエストを実行するリスナメソッド (複数記述可能)
- ページ間フォワードで、別ページからのパラメータを受け取るためのsetterメソッド
が存在します。
そのほかにも、
- LogicクラスをDIしてもらうためのsetter
があったりもします。
無設定Struts
PageのインスタンスはS2コンテナに管理してもらいます。
S2,S2Strutsの機能を十分に生かすことで、以下のようなメリットが生まれます。
- Pageに対してLogicの自動インジェクションなどが行える
- diconファイルに無設定で、Pageクラスの自動S2コンテナ登録ができる (ZeroConfigActionFormRuleImpl)
- struts-config.xmlに無設定で、PageクラスのActionConfig登録ができる (AutoPageRegisterPlugIn)
とことん無設定化を図っています。
というより、struts-config.xmlでActionやActionFormの設定をすることは想定してません。
それだけに規約を知らないと何がなんだか…という状態ですが、まあ気にしないと。
ページへのリクエスト
Webブラウザからのリクエスト
OzStrutsと同様に
http://ドメイン/アプリケーション名/ページ名/リスナメソッド名.do
とアクセスします。
ビューでは、Pageのsetter/getterをターゲットとしてフォーム情報をバインドします。
別Pageからのフォワード/リダイレクト
PageForwardクラスを使用します。
リスナメソッドの戻り値で
return new PageForward(MainPage.class); return new PageForward(MainPage.class, true); // リダイレクト
とすれば、MainPageにフォワード/リダイレクトされます。
MainPageに対してパラメタを渡したい場合は、
PageForward forward = new PageFoward(MainPage.class); forward.addParameter(MainPage.ARG_HOGE_ID, "ほげ"); return forward;
のようにPageForwad#addParameter()を使って指定します。
この値はPdStrutsによって、MainPageのインスタンスに対してpopulateされます。
パラメタのキーとなるプロパティ名は、直接文字列で指定するよりも、上記のように受け取るページ側でAPIとしてARG定数を用意しておいたほうが良いですね。
なお、リスナメソッドの戻り値ですが、PageForwardの他に、void, Stringも選べます。
voidの場合は、無設定化規約によって決定されるsuccessパスが使われます。(HogePageならWEB-INF/pages/Hoge.jsp みたいな感じです)
Stringの場合は、/で始まる場合はそのまま絶対パスとして使用し、それ以外の場合はフォワード名としてActionMappingからその文字をキーに取得したパスを使用します。
-
-
- -
-
とりあえずまずはこんなところで。