「Struts2 ベストプラクティス」の版間の差分

提供: tknotebook
移動: 案内検索
(Conventionプラグインを入れてアノテーションを使う)
(Conventionプラグインを入れて既定の jspファイル名を使う)
21行: 21行:
 
こうするとアノテーションが簡潔になります。
 
こうするとアノテーションが簡潔になります。
  
;1アクションクラス=1画面=1個以上のアクション
+
==一アクションクラス=一画面=一個以上のアクション
:struts2は1アクションクラス=1アクションが基本ですが、クラスが増えすぎます。アノテーションを使って1アクションクラス=1画面=1個以上のアクション という対応にすることをお勧めします。'''アクションはメソッドに割り付けます'''。
+
:アクションのURL は <コンテキストパス><アクションクラスに割り付けたネームスペース>/<アクション名>.action とすることを推奨します。
+
  
;画面毎にネームスペースを分ける
+
struts2は一アクションクラス=一アクションが基本ですが、フォームに複数のボタンがある場合クラスが増えすぎます。
:画面=アクションクラス毎にネームスペースを別にすると、各画面で同じアクション名が使えて便利です。アクションクラス毎に @Namespaceアノテーションを使うことを推奨します。
+
アノテーションを使って一アクションクラス=一画面=一個以上のアクション という対応にすることをお勧めします。
 +
'''アクションはクラスではなくメソッドに割り付けます'''。
  
;画面の種類毎に java のパッケージを分ける
+
==画面毎(アクションクラス毎)にネームスペースを分ける==
:struts2 では package-info.java に @ParentPackage アノテーションで付けることで、Javaのあるパッケージ、およびそのサブパッケージ全体に struts.xml 内で定義した package を継承することができます。画面の種類ごとに画面がstruts.xml 内で定義した 異なるpackage を継承する場合、アクションクラスの所属する java package を分けると便利です。
+
  
;バリデーションなしのメソッドはアノテーションで
+
アクションのURL は <コンテキストパス><アクションクラスに割り付けたネームスペース>/<アクション名>.action とすることを強く推奨します。こうするとクラス間でアクション名が重複しても問題ありません。
:バリデーションの設定のある画面でバリデーションを行わずに画面を表示する場合、アクションは input や browse 等を使うことになっていますが、私は初期表示は showアクションに決めています。バリデーションの抑止は @SkipValidation アノテーションを使います。
+
 
 +
アクションクラス毎に @Namespaceアノテーションを使うことを推奨します。
 +
 
 +
==画面の種類毎に java のパッケージを分ける==
 +
 
 +
strutsでは struts.xml で定義した複数の package の定義をそれぞれ別の画面のグループに割り付けたくなることが多々あります。
 +
 
 +
例えば
 +
 
 +
#グループA: どんな状況でも表示できる画面のグループ
 +
#グループB: ログイン中に表示できるグループ
 +
#グループC: 管理者がログイン中であるときのみ表示できるグループ
 +
 
 +
このような画面のグループはインターセプターの設定や global-result の設定などがグループ毎に異なります。
 +
このような設定を画面ごとに別々に行うのは大変なので、設定を struts.xml にまとめて
 +
幾種類か package の形で書いておき、それを画面で'''「継承」'''して使うのが楽です。
 +
 
 +
struts2 では Java の package の package-info.java に @ParentPackage アノテーションで付けることで、Javaのあるパッケージ、およびそのサブパッケージ全体に struts.xml 内で定義した package を継承させることができます。
 +
 
 +
画面の種類ごとに画面がstruts.xml 内で定義した 異なるpackage を継承する場合、アクションクラスの所属する java package を分けると便利です。
 +
 
 +
==バリデーションなしのメソッドはアノテーションで指定する==
 +
 
 +
バリデーションの設定のある画面では、最初にバリデーションなしで画面を表示する必要があります。
 +
バリデーションを行わずに画面を表示する場合、アクションは既定ではアクションクラスの input や browse メソッド等、
 +
決まった名前のメソッドを使うことになっていますが、私は初期表示は showアクションに決めています。
 +
バリデーションの抑止は @SkipValidation アノテーションを使います。
  
 
;同じ内容で複数のJSPは struts2 の includeタグを使う
 
;同じ内容で複数のJSPは struts2 の includeタグを使う
 
:結果を表示する JSP は、表示する内容は全く同じでも、Conventionプラグインによる命名では異なるファイル名になってしまうことがあります。この時は struts2 の includeタグ で中身を同じにしてしまうことを推奨します。
 
:結果を表示する JSP は、表示する内容は全く同じでも、Conventionプラグインによる命名では異なるファイル名になってしまうことがあります。この時は struts2 の includeタグ で中身を同じにしてしまうことを推奨します。

2017年1月17日 (火) 09:54時点における版

メインページ>コンピュータの部屋#Java>Struts2 Tips


私なりにまとめたベストプラクティスです。

Conventionプラグインを入れてアノテーションを使う

アクションの設定を全て struts.xml で設定を行うより、Conventionプラグインを入れてアノテーションで設定を書く方が楽です。

但し、複数のアクションや複数の画面に共通の設定は struts.xml に書くしかないです。

Conventionプラグインを入れて既定の jspファイル名を使う

コンベンションプラグインを入れると、アクション実行後、既定で

/WEB-INF/content/<ネームスペース>/<アクション名>-<戻り値>.XXX(JSPなど)

にフォワード(Dispatch)されます。リダイレクトやチェーンなどをせず、JSP等を呼び出すだけの場合は @Resultアノテーションを使わず、コンベンションプラグインが決めてくれるビュー名を使うことをお勧めします。

こうするとアノテーションが簡潔になります。

==一アクションクラス=一画面=一個以上のアクション

struts2は一アクションクラス=一アクションが基本ですが、フォームに複数のボタンがある場合クラスが増えすぎます。 アノテーションを使って一アクションクラス=一画面=一個以上のアクション という対応にすることをお勧めします。 アクションはクラスではなくメソッドに割り付けます

画面毎(アクションクラス毎)にネームスペースを分ける

アクションのURL は <コンテキストパス><アクションクラスに割り付けたネームスペース>/<アクション名>.action とすることを強く推奨します。こうするとクラス間でアクション名が重複しても問題ありません。

アクションクラス毎に @Namespaceアノテーションを使うことを推奨します。

画面の種類毎に java のパッケージを分ける

strutsでは struts.xml で定義した複数の package の定義をそれぞれ別の画面のグループに割り付けたくなることが多々あります。

例えば

  1. グループA: どんな状況でも表示できる画面のグループ
  2. グループB: ログイン中に表示できるグループ
  3. グループC: 管理者がログイン中であるときのみ表示できるグループ

このような画面のグループはインターセプターの設定や global-result の設定などがグループ毎に異なります。 このような設定を画面ごとに別々に行うのは大変なので、設定を struts.xml にまとめて 幾種類か package の形で書いておき、それを画面で「継承」して使うのが楽です。

struts2 では Java の package の package-info.java に @ParentPackage アノテーションで付けることで、Javaのあるパッケージ、およびそのサブパッケージ全体に struts.xml 内で定義した package を継承させることができます。

画面の種類ごとに画面がstruts.xml 内で定義した 異なるpackage を継承する場合、アクションクラスの所属する java package を分けると便利です。

バリデーションなしのメソッドはアノテーションで指定する

バリデーションの設定のある画面では、最初にバリデーションなしで画面を表示する必要があります。 バリデーションを行わずに画面を表示する場合、アクションは既定ではアクションクラスの input や browse メソッド等、 決まった名前のメソッドを使うことになっていますが、私は初期表示は showアクションに決めています。 バリデーションの抑止は @SkipValidation アノテーションを使います。

同じ内容で複数のJSPは struts2 の includeタグを使う
結果を表示する JSP は、表示する内容は全く同じでも、Conventionプラグインによる命名では異なるファイル名になってしまうことがあります。この時は struts2 の includeタグ で中身を同じにしてしまうことを推奨します。