SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

続 Struts 2入門

Struts 2アプリでアノテーションを活用するConventionプラグイン

続・Struts2入門(5)

(3)ParentPackage

 指定されたNamespace(package)の継承をします。継承元の設定(struts.xmlならびにアノテーション)を利用して、さらに上書きして利用できます。

リスト7 ParentPackageの設定方法
@Namespace("/ajax")
@ParentPackage("json-default")
public class SampleAction extends ActionSupport {
  …(Actionクラス実装)…
}

 アプリケーション共通設定をstruts.xmlにて定義している場合や、プラグインを用いている場合に指定されることがあります。プラグインにて指定されている場合ですが、プラグイン内にもstruts.xmlと同等の設定が必ず記述されているので、カスタマイズをする場合には、別途struts.xmlにて内容を変更することが望ましいです。

(4)ResultPath

 Actionクラスの処理終了後の遷移先にて指定される、JSPなどの格納先を指定します。Conventionプラグインで定義されているデフォルトの格納先以外を指定したい場合に使われます。

リスト8 ResultPathの設定方法
@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)を参照してください。

リスト9 ExceptionMappingの設定方法
@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クラスの処理が完了した後の遷移先を設定します。省略せずに記述した例を以下に示します。

リスト10 Resultsの設定例(抜粋)
@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設定同様、以下のものがあります。

表2 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をご紹介します。

参考資料

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
続 Struts 2入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 東 浩二(アズマ コウジ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5271 2010/07/15 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー