はじめに
Struts環境下でActionごとに固定のパラメータを渡す方法について記載。
背景
Strutsフレームワークで構築された単一プロジェクト内にて、
ロジックが同一(で設定の切り替えがプロパティファイルの差し替え等で事足りるレベル)のアプリケーションを複数同時に動かしたいというユーザの追加要求に対応するため。
分かっていれば、最初からそういう構成にしていたのですが、
発覚したのが一通りテストまで終わったタイミングという・・・・・・
プロジェクトが単一のアプリケーションで構成されているのであれば、
プロジェクト単位で複数動かす方法で事足りるのですが、
元々複数の異なるアプリケーションが乗っかかっている上に、
複数動かしたいのはその中の一部のアプリケーションのみのため断念。
いっそ該当するロジックの部分だけコピーして複数作ってもいいのだけど、
何か修正するたびに修正コストが倍々になるのは避けたいし。
そこで、Struts-config.xmlにて、
actionタグごとのparameter属性でパラメータを渡すことが出来るので、
リンク元を複数に分け、踏んだリンクによって渡すパラメータを変える方法で実装することに。
実装方法
Actionはすべて同一
<action path="/linkA" type="com.hogehoge.xxxAction" parameter="AAA">
(中略)
</action>
<action path="/linkB" type="com.hogehoge.xxxAction" parameter="BBB">
(中略)
</action>
<action path="/linkC" type="com.hogehoge.xxxAction" parameter="CCC">
(中略)
</action>
String xxx = ActionMapping.getParameter();
session.setAttribute("_LINK_PARAM_", xxx);
あとは渡されたパラメータによって、
読み込むプロパティを変えたりする部分だけを実装すればOK。
おわりに
最初から分かっていれば出口をその分用意するような実装が一番手っ取り早いのですが、
「複数」の数が決まってない場合、今後増えたり減ったりする可能性がある場合、などはこっちの方が楽な気がします。