Struts2でのプロパティファイルから値を取得する方法
いまさら、Struts2といわれたら。それまでなんだけど。
Struts2でプロパティファイルから値を取得する方法があって順番は下記の通り。
Resource Bundle Search Order
Resource bundles are searched in the following order:
1.ActionClass.properties
2.Interface.properties (every interface and sub-interface)
3.BaseClass.properties (all the way to Object.properties)
4.ModelDriven’s model (if implements ModelDriven), for the model object repeat from 1
5.package.properties (of the directory where class is located and every parent directory all the way to the root directory)
6.search up the i18n message key hierarchy itself
7.global resource properties
プロパティファイルを一元管理したいなら、7.global resource properties でいいんじゃないかなと。
ActionSupport as = new ActionSupport(); as.getText("hoge")
この時に取得できるのが7だけだった。
1~6(特に5.package.propertieで画面表示用に一元管理していた場合)は、7に移動させた方がいいと思う。
というのは…
【小言開始】
Jsp表示時にリストボックスを出力するときにLinkedHashMap(キー、値)で作成すると表示しやすい。(下記例)
jsp側での取得方法
<s:select name="hogeName" list="getHogeMap()" emptyOption="true" cssStyle="width:20em;"></s:select>
java側での作成方法
public Map<string , String> getHogeMap() { Map</string><string , String> hogeMap = new LinkedHashMap</string><string , String>(); hogeMap.put(hogeKey1, getText("hoge1")); hogeMap.put(hogeKey2, getText("hoge2")); hogeMap.put(hogeKey3, getText("hoge3")); return hogeMap }
値を国際化対応するためgetTextが必要だったので、actionクラスで作成していた。
で、同じリストボックスなのに毎回作成していて、共通処理できないかなと思ったのがきっかけ。
他にも、ログ出力の国際化、プロパティ取得とかを考えたら、7.global resource properties でいいんじゃないかなと。
getTextはActionクラスだけで使用すべき論、
ActionSupportを継承した~Actionではないクラスを作成して、そこからgetTextする論
abstractのActionクラス作って共通処理する論
などいろいろ方法や考え方は出たんだけど…。
7.global resource properties でいいんじゃないかなと。
【小言終了】
7.global resource propertiesを使うためには、struts.xmlにて使うプロパティファイルを定義すれば使える。
struts.xml(一部抜粋)
<struts> <!-- プロパティファイル --> <constant name="struts.custom.i18n.resources" value="global"></constant>
globalは自由に変更可能
i18nを使うので、名前の最後に”_ja”とつける事で国際化対応完了。
_jaに日本語、_enに英語で設定ファイルを記述すればOK。
まあ、英語をデフォルトにするなら、global_ja.properties(日本語)とglobal.properties(英語)でOK。
そうすれば、地域のロケーションによりi18nで使うファイルを選んでくれると。
配置場所はWEB-INF/classesに、global_ja.properties と global.properties。
java側での取得方法
Actionクラスでは元々継承しているので宣言する必要なし
validatorの場合、
@RequiredStringValidator(key=”sample.test”)
他の部分で取得したい場合は下記。
ActionSupport as = new ActionSupport(); as.getText("hoge")
jsp側での取得方法
<s:text name="hoge"></s:text> <s:submit method="hoge" value="%{getText('hoge')}"></s:submit>
【参考サイト】
struts2properties(プロパティファイル)の設定と取得|プログラム垂れ流し
http://ameblo.jp/tyoku123/entry-10439370680.html
CMS Labs Struts 2のバリデーションエラー・メッセージ&国際化への対応
http://cmslabs.blogspot.jp/2011/02/struts-2_21.html
Struts2ローカライズサンプル
http://www.kobu.com/i18n/struts2/index.htm