アノテーションベースでStruts2のActionクラスを記述する(2016 Spring Ver.)
アノテーションを使ったActionの設定
アノテーションを使ったActionクラスの設定は、Struts2の公式プラグインの1つであるStruts2-Convention-pluginを導入すると可能です。
Actionクラスの設定は、struts.xml(ないしはその派生xmlファイル)に記述するルールですが、Conventionプラグインを使うことで、個別のActionクラスの設定をxmlに分離せず、Actionクラスに直接記載できます。
対応バージョン
Struts2.1.x , 2.2.x , 2.3.x , 2.5
導入方法
入手方法はいくつかあります。お好みでどれか1つをお選びください。
Pleiades All in one Eclipseを用いたStruts2公式ブランクプロジェクトの導入 がてっとり早いです
- Struts2公式サイトからStruts2一式をダウンロードして解凍した後、struts2-convention-plugin-2.5.jar(ないしは最新版)を/WEB-INF/libコピーする。
- mavenを使ってjarを追加する。
- 公式サイトからStruts2-conventionのmavenアーキタイプ(導入方法:https://struts.apache.org/docs/struts-2-maven-archetypes.html) を導入してアプリケーションを構成する。
Conventionプラグインの導入には、設定ファイルの追記や編集は不要です。
アノテーションで設定できるもの
struts.xmlで設定できること=アノテーションで全て可能です。Actionクラスの設定方法そのものが柔軟性をもっていますので、記述パターンもいくつかあります。ここでは使いやすい内容で紹介します。
アノテーション | 役割 | 記述例 |
---|---|---|
@Namespace | Actionクラスが属する名前空間。URLの一部になる。 | @Namespace("/") |
@ParentPackage | Actionクラスが継承する名前空間。指定したパッケージの設定を引き継く。 | @ParentPackage("struts-default") |
@Result | Actionクラスのreturn値と出力先を設定する。親要素に@Resultsを持つ | @Result(name = ActionSupport.SUCCESS, location = "form" , type="dispatcher") |
@Action | Actionクラスであることを宣言。URLの一部になる。親要素に@Actionsを持つ | @Action("") |
@InterceptorRef | Actionクラスが使うインターセプタを変更する。親要素に@InterceptorRefsをもつ | @InterceptorRef("defaultStack") |
@ExceptionMapping | Actionクラスで例外をキャッチした時の例外クラスとresultの値を定義する。親要素に@ExceptionMappingsを持つ | @ExceptionMapping(exception="java.lang.Exception" , result="exception") |
- アノテーションのNamespace(名前空間)=struts.xmlのpackage要素と同じです。
- 入力値検証(Validation)のアノテーションは、Conventionプラグインに含まれません。
- Actionはpublicメソッドに記載すると記述量が減ります。Actionsが不要になります。
記載例
以下に設定例を示します。
/**
*
*/
package lumi.action.sample;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.ExceptionMapping;
import org.apache.struts2.convention.annotation.ExceptionMappings;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import com.opensymphony.xwork2.ActionSupport;
/**
* @author A-pZ
*
*/
@Namespace("/sample")
@ParentPackage("struts-default")
@Results({
@Result(name = ActionSupport.SUCCESS, location = "index.jsp" , type="dispatcher"),
})
@ExceptionMappings({
@ExceptionMapping(exception="java.lang.Exception" , result="exception")
})
public class SampleAction extends ActionSupport {
@Action("display")
public String sample() throws Exception {
return SUCCESS;
}
}
このActionクラスは、/sample/display または /sample/display.action でリクエストできます。
つまり、@Namespaceの値/@Actionの値 となります。
@Resultのlocationで指定したファイルの配置場所
Conventionプラグインのデフォルト設定では、必ず次の場所に配置したものを読み込みます。
/WEB-INF/content/@Namespaceの値/@Resultのlocation属性値
先ほどの例では、/WEB-INF/content/sample/index.jspとなります。
他のフレームワークと組み合わせた例
ここでは例のみ挙げますが、Struts2+Spring3+Lombokを組み合わせて記載した例も紹介します。
Author And Source
この問題について(アノテーションベースでStruts2のActionクラスを記述する(2016 Spring Ver.)), 我々は、より多くの情報をここで見つけました https://qiita.com/alpha_pz/items/4a97df916102dad2e2bc著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .