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からその文字をキーに取得したパスを使用します。

      • -

とりあえずまずはこんなところで。