自動設定Strutsできました

id:nowokayさんの無設定StrutsにインスパイアされてJ2SE1.4で動く自動設定Struts作ってみたんですけどいります?単純にアクションクラス名からパス名、アクションフォーム名、フォワード先JSP名等を決定し、結びつけて登録するだけなんですが。

ソースはこちら(AutoStrutsConfigPlugin.java)。ご自由にどうぞ。

アクションクラス名からパス名、アクションフォーム名、"success"時のフォワード先JSP名を決定する名前付けルールは以下のとおり。

パス名
アクションクラス名から"Action"をとり、大文字区切りを"_"区切りに直したもの
アクションフォーム名
アクションクラス名の最初の大文字区切りの文字列に「Form」をつけたもの
"success"時のフォワード先JSP
アクションクラス名から"Action"をとり、大文字区切りを"_"区切りに直し、拡張子".jsp"をつけたもの

アクションフォームクラスのパッケージはアクションクラスと同じパッケージ、JSPファイルはアクションクラスのあるディレクトリと同じディレクトリにあることを仮定しています。(これらは変更可能。後述します。)

例えばアクションクラスをorg.foo.UserListActionとすると

パス名
/user_list
アクションフォーム名
UserForm
アクションフォームクラス
org.foo.UserForm
"success"時のフォワード先JSP
/WEB-INF/classes/org/foo/user_list.jsp

となります。名前付けルールを変えたい場合はgetPath()やらgetName()等の名前を求めているメソッドをいぢってください。


で、使い方。

  1. AutoStrutsConfigPlugin.javaコンパイルして配置
  2. struts-config.xmlの最後にplug-inとして登録
    <plug-in className="autostrutsconfig.AutoStrutsConfigPlugin" />
</struts-config>

以上。後はアクションクラスを置くだけで自動的にバインディングされます。struts-config.xml記述不要。


アクションフォームクラスのパッケージ、JSPファイルのディレクトリをデフォルトから変更したい場合はstruts-config.xmlのplug-inの設定の中で以下のようにパラメタを設定します。("formPackage"がアクションフォームのパッケージ名。"jspDir"がJSPファイルのディレクトリ。)

    <plug-in className="autostrutsconfig.AutoStrutsConfigPlugin">
        <set-property property="formPackage" value="org.bar."/>
        <set-property property="jspDir" value="/WEB-INF/"/>
    </plug-in>
</struts-config>


パス名、アクションフォーム名、フォワード先をデフォルトから変更したい場合、またアクションフォームのスコープやバリデーションをするかどうか等は定数アノテーションで設定可能。アクションクラス中に以下のように記述します。

// パス名の指定
public static final String PATH = "/foo_bar";

// アクションフォーム名の指定
public static final String NAME = "FooBarForm";

// アクションフォームクラスの指定
public static final String TYPE = "org.foo.bar.FooBarForm";

// アクションフォームのスコープの指定
public static final String SCOPE = "request";

// バリデーションを行なうかどうかの指定
public static final String VALIDATE = "false";

// エラー時の戻り先の指定
public static final String INPUT = "/WEB-INF/foo.jsp";

// フォワード先の指定("FORWARD_"以降の文字列をフォワード名とする。この場合は"fail")
public static final String FORWARD_fail = "/WEB-INF/fail.jsp";

// リダイレクトする場合はフォワード先の前に"redirect:"をつける
public static final String FORWARD_error = "redirect:/error.do";


という感じなんですがいかがでしょ。現在、実戦投入中です。