arison.jp arison.jp blog - 現在をたのしく、未来をたのしむ。日常の思い出兼備忘録。

【Java】Struts2でのプロパティファイルから値を取得する方法

Struts2でのプロパティファイルから値を取得する方法

いまさら、Struts2といわれたら。それまでなんだけど。
Struts2でプロパティファイルから値を取得する方法があって順番は下記の通り。

Localization


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

About arison

大都会岡山の南部にある玉野市生まれ。 大都会岡山のIT会社(目標は大都会No.1)でコンピュータとお客を相手に日夜格闘中。 関東出張中はグルメブログ。 基本的に遊び人のおっさん。 ライフハックとガンダム好き。ギガフロート玉野を浸透中。

25. 1月 2013 by arison
Categories: 日記, プログラミング | Tags: , | Leave a comment

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください