Apache/Jakarta編

Strutsで別モジュールのアクションにアクセスする方法(SwitchAction)

WINGSプロジェクト
佐藤匡剛(MOGRA DESIGN, Ltd.)
2004/11/

 Strutsでは、1.1よりモジュールという機能が追加されました。これは、Struts構成ファイル(struts-config.xml)の肥大化を防いだり、Webアプリケーションを機能ごとに分割して開発したりするための方法を提供するものです。

 モジュールは本来アプリケーションを機能ごとに分割するためのものです。そのため、あるモジュールから別のモジュールへアクセスすることは、モジュール間の依存性を強めるので好ましくありません。しかし、場合によってはどうしても必要となることもあるでしょう。

 このような場合は、以下の3種類の方法で別モジュールのアクションにアクセスできます。

  • StrutsのHTMLタグライブラリ(struts-html.tld)を使い、ハイパーリンク用のタグでmodule属性を指定する(Struts1.2以降)
  • Struts構成ファイル中の<forward>タグで、コンテキストからの相対パスを指定する
  • Struts組み込みのアクションSwitchActionを使う

Struts1.2以降であれば、最も簡単な方法はHTMLタグライブラリによる方法でしょう。しかし本稿では、Struts 1.1でも使うことのできる、SwitchActionによる方法について説明します。

※Strutsのモジュール機能の使い方については、「Strutsでコンフィグレーションファイルを分割する」を参照してください。

■使い方

 まず、Struts構成ファイルのアクションマッピングにSwitchActionを登録します。アクションへのパスはどこへ設定しても構いませんが、ここでは「/switch」としています。

struts-config.xml(抜粋)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts 
Configuration 1.2//EN" 
"http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
<struts-config>
...中略...
<action-mappings>
...中略...
<action path="/switch" type="org.apache.struts.actions.SwitchAction"/>
...中略...
</action-mappings>
...中略...
</struts-config>

 SwitchActionクラスへアクセスするには、以下の2つのリクエスト・パラメータが必要になります。

SwitchActionで指定すべきリクエスト・パラメータ
パラメータ 説明
prefix アクセスしたいモジュールを指定するための接頭辞。「mod」モジュールへアクセスするならば、「/mod」とする。デフォルトモジュールの場合は、「/」とはせず空の文字列を渡す
page 切り替え先となるモジュール内のページ。モジュールのStruts構成ファイルにおいて、パス「/dir/page」にマッピングされているアクションへアクセスするには、「/dir/page.do」を渡す

 モジュール「mod1」から、モジュール「mod2」の「/myPage」アクションにアクセスするには、以下のようにします。

<action name="success" path="/switch.do?prefix=/mod2&amp;page=/myPage.do" />

 また、デフォルトモジュールの「/myPage」アクションへアクセスする場合は、

<action name="success" path="/switch.do?prefix=&amp;page=/myPage.do" />

となります。

 ここではGETメソッドを用いましたが、POSTメソッドを使い、フォームから上記のリクエスト・パラメータを送信しても問題ありません。

 なお、当然ですが、

http://localhost:8080/myContext/mod1/switch.do?prefix=/mod1&page=/switch.do

などとすると、循環参照が起こってエラーとなります。気を付けてください。



「Java TIPS」