(3)ParentPackage
指定されたNamespace(package)の継承をします。継承元の設定(struts.xmlならびにアノテーション)を利用して、さらに上書きして利用できます。
@Namespace("/ajax")
@ParentPackage("json-default")
public class SampleAction extends ActionSupport {
…(Actionクラス実装)…
}
アプリケーション共通設定をstruts.xmlにて定義している場合や、プラグインを用いている場合に指定されることがあります。プラグインにて指定されている場合ですが、プラグイン内にもstruts.xmlと同等の設定が必ず記述されているので、カスタマイズをする場合には、別途struts.xmlにて内容を変更することが望ましいです。
(4)ResultPath
Actionクラスの処理終了後の遷移先にて指定される、JSPなどの格納先を指定します。Conventionプラグインで定義されているデフォルトの格納先以外を指定したい場合に使われます。
@Namespace("/ajax")
@ResultPath("/screens")
public class SampleAction extends ActionSupport {
…(Actionクラス実装)…
}
必ず/(スラッシュ)から始まるパスで記述します。パスはWEBアプリのルートディレクトリからの相対パスになります。実際に配置するファイルは、ResultPath+Namespace以下になるため、上の例では、/screens/ajax/以下にJSPを置きます。
なお、デフォルトでは、JSPなどresult先の配置場所は、/WEB-INF/content/[@Namespaceの値]/と指定されており、この/WEB-INF/content/はstruts.propertiesにて、struts.convention.result.pathで指定されたWEBアプリからの相対パスとなります。
実際に、struts.convention.result.pathのデフォルト値=/WEB-INF/content/とプラグイン内で指定されています。
(5)ExceptionMapping
Actionクラスで発生した例外をハンドリング可能にします。共通の設定以外の例外ハンドリングする際に使われます。例外の共通設定についてはStruts 2のインターセプタの選定(1)の(3)Exception Interceptor(CodeZine)を参照してください。
@ExceptionMappings({
@ExceptionMapping(exception="java.lang.Exception" , result="success")
})
public class SampleAction extends ActionSupport {
…(Actionクラス実装)…
}
exceptionで例外クラスを定義し、検出するとresultへ遷移します。
指定できるresultは、JSPなどのリソースではなくresult値であるため、Actionクラスまたは継承したNamespace(package)での遷移先が設定されていない場合は、Actionクラスのエラーとなります。
(6)Result
Actionクラスの処理が完了した後の遷移先を設定します。省略せずに記述した例を以下に示します。
@Results({
@Result(name="input" , type="dispatcher" , location="success.jsp"),
@Result(name="success" , type="dispatcher" , location="success.jsp"),
@Result(name="prefs" , type="json" , params={"root" , "prefnames"})
})
public class SampleAction extends ActionSupport {
// …(Actionクラス実装部分)…
}
@Resultアノテーションで設定する属性は従来のActionクラスのResult設定同様、以下のものがあります。
| 属性名 | 説明 |
| name | Actionクラスの戻り値の文字列 |
| type | 遷移タイプ。省略時はdispatcher(リクエストのフォワード) |
| location | 遷移先のリソース名。JSPファイルなど |
| params | 引き渡すパラメータを定義 |
location属性では、WEB-INFからの相対パス指定もできますが、直接JSPファイルのみを指定できます。この場合、ResultPathの項にもあるように、/WEB-INF/content/[@Namespaceの値]/へ自動的に参照します。そのため、あらかじめ/WEB-INF/以下に、content/[@Namespace]ディレクトリを作成することになります。
なお、@Resultsを完全に省略した場合では、Conventionプラグインでは次のように振る舞います。
- Actionクラスの戻り値は"success"とする
- 遷移先は、/WEB-INF/content/[@Namespaceの値]/[Actionクラスのハイフンつなぎへ変換].jsp
例えば@Namespaceを指定していないHelloWorldActionの場合、/WEB-INF/content/hello-world.jspへ遷移することになります。無設定にすることは稀ですが、Actionクラスが非常に単純な作りの場合には適用できるでしょう。
まとめ
今回はStruts 2プラグインの導入と、Struts 2での記述法を定めるConventionプラグインの解説をしました。Conventionプラグインを導入することで、ある程度ルール化されたアプリケーションの記述法が明確になり、また、設定ファイルも整理されることが理解できたかと思います。
次回はStruts 2でのもう1つの入力チェックとして採用されたOval Pluginをご紹介します。
