2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Struts2とConventionプラグイン

Last updated at Posted at 2013-12-17

Conventionプラグインとは

一言で説明すると、
Struts2のActionクラスに関する設定を、「すべて」アノテーションで定義できる

これにより、以下のことが言えます
struts.xmlにはActionクラスの振る舞いを書かない!
Actionクラスの動きは、Actionクラス自身がもっている!

つまり、設定ファイルからActionクラスの定義が消えることで、アプリケーションの全体設定(共通設定)だけ書くところになり、きれいになり、他にもいくつかの「しきたり」ができ、自由奔放に実装できるStruts2のActionクラスを整理できる。

といいこと尽くしなので導入しない手はありません。

Actionで設定したアノテーションの設定を見る

Struts2には現在のアプリケーション設定を一望できるConfig-Browserプラグインがありますので、これを導入するだけで良いです。
※設定から何から全部見れてしまうため、くれぐれも本番環境にはConfig-Browserプラグインは載せないようにしましょう。

アノテーションで設定するもの

以下のものを設定できます。

  • @Namespace : struts.xmlのpackageと同じ。URLの一部となる。スラッシュ(/)から始まる。
  • @ParentPackage : 設定を継承する @Namespace または package
  • @InterceptorRefs : 利用するインターセプタ&インターセプタスタック
  • @Results : Actionクラスのreturn値に対する遷移先( レスポンス先 )
  • @ExceptionMappings : 例外発生時の遷移先
  • @Action : ActionクラスのURLパスを設定 ( メソッド単位にも設定可能 )

リクエストされたURLとActionクラスのマッピングは次のルールで一意に決まります。

@Namespaceの値/@Actionの値

例えば、@Namespace("/master/user")、publicメソッドに@Action("search")とした場合は、

/(コンテキストパス)/master/user/search

@Namespace("/check")、@Action("")とした場合は、

/(コンテキストパス)/check/

@Namespace("/")、@Action("")とした場合は、

/(コンテキストパス)/

となります。
※Conventionプラグイン利用時は.actionを省略できる( Conventionプラグインの初期設定 )

Conventionプラグインの設定に関するあいまいさ

Actionクラスの@Namespace@Actionのルールについては、少しゆるい設定ができます。

  • 1つのActionで複数のpublicメソッド+@Actionを用意すると、URLを分割できる。
  • 複数のActionクラスで、同じ@Namespaceを共有できる。

このため、仕組み上では複数のActionクラスをグルーピングして、同じ@Namespaceに含めることもできます。
つまり好き勝手に作れる気楽さはありますが、複数人で作る場合にはルールが必要です。
また、例え複数のActionクラス内で、完全に同一の@Namespace@Actionの組み合わせがあった場合は、エラーが発生することはなく、「どちらかが優先されます」

どちらかはわかりません

ですので、ルール作りが必要です。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?