Struts2:properties(プロパティファイル)の設定と取得
とりあえずなんらかのプロパティファイルを設定する。
ここでは、Struts2特有のパッケージ名.propertiesとか、アクション名.propertiesのやりかたはしない。
アクション毎に作るのはファイルが増えてうっとうしいので、
struts.xmlにて使うプロパティファイルを定義する方法を採用します。
とりあえず。プロパティファイルを作らないと話にならないので、作ります。
たぶんメッセージと設定とか、複数使う事が多いので、2個くらい作っておきます。
confg_ja.properties
--------------------------------------
sample.test=てすと
db.class=com.mysql.jdbc.Driver
db.url=jdbc:mysql://{0}/{1}
db.host=localhost
db.schema=hoge
db.user=hogeuser
db.pass=hogepass
--------------------------------------
message_ja.properties
--------------------------------------
hoge.test2=ほーげー!!
--------------------------------------
i18nを使うので、名前の最後に"_ja"とつける事で国際化対応できます。
_jaに日本語、_enに英語で設定ファイルを記述すればよいわけです。
そうすれば、地域のロケーションによりi18nで使うファイルを選んでくれます。
便利ですね。
次にstruts.xmlに設定します。
struts.xml(一部抜粋)
--------------------------------------
<struts>
<!-- プロパティファイル -->
<constant name="struts.custom.i18n.resources" value="config,message"/>
--------------------------------------
ファイルはカンマ区切りで設定できます。
設定する時は、ロケーションを付加しない所に注意してください。
これでとりあえず設定は終わりです。
やりがちな悪い例は以下の通り。
<constant name="struts.custom.i18n.resources" value="config"/>
<constant name="struts.custom.i18n.resources" value="message"/>
ってやると、struts.custom.i18n.resourcesを2回設定してる事になるので、最初のやつが上書きされてmessageしか使えなくなります。
次に実装
画面で取得するjsp側とJava側で取得するパターンがあると思うので、両方書いておきます。
とりあえずjava側
ActionSupportクラスのgetTextメソッドにて取得できます。
Actionクラスでは元々継承しているので宣言する必要はありませんね。
DAOとか自分で作ったクラスで使いたい場合は、ActionSupportを継承するか、
インスタンス生成してgetTextを呼び出す感じになるかと思います。
私の以前作ったDAOのコネクション作成部分をサンプルとしてメモしておきます。
hogehogeDao.java
--------------------------------------
/**
* コネクションを取得する。
*/
private void getConnection(){
try{
ActionSupport as = new ActionSupport();
Class.forName(as.getText("db.class"));
String dbUrl = as.getText("db.url",new String[]{as.getText("db.host"),as.getText("db.schema")});
conn = DriverManager.getConnection(dbUrl, as.getText("db.user"), as.getText("db.pass"));
conn.setAutoCommit(false);
}catch(SQLException e){
e.printStackTrace();
this.roleBack();
} catch (ClassNotFoundException e) {
e.printStackTrace();
this.roleBack();
}
}
--------------------------------------
Connectionはクラス内変数として定義しています。
String dbUrl = as.getText("db.url",new String[]{as.getText("db.host"),as.getText("db.schema")});
はdb.url=jdbc:mysql://{0}/{1}
にString配列で宣言した値を埋め込んでいます。
こうゆう書き方も出来ます。String[]使うかList<Object>使うかはお好みですね。
List<Object> st = new ArrayList<Object>();
st.add(as.getText("db.host"));
st.add(as.getText("db.schema"));
String dbUrl = as.getText("db.url",st);
validatorの場合、
@RequiredStringValidator(key="sample.test")
で取得できます。
次にjsp側での取得方法です。
<s:text name="sample.test"/>
でいけるっぽいです。
え?って感じですね。
ここでは、Struts2特有のパッケージ名.propertiesとか、アクション名.propertiesのやりかたはしない。
アクション毎に作るのはファイルが増えてうっとうしいので、
struts.xmlにて使うプロパティファイルを定義する方法を採用します。
とりあえず。プロパティファイルを作らないと話にならないので、作ります。
たぶんメッセージと設定とか、複数使う事が多いので、2個くらい作っておきます。
confg_ja.properties
--------------------------------------
sample.test=てすと
db.class=com.mysql.jdbc.Driver
db.url=jdbc:mysql://{0}/{1}
db.host=localhost
db.schema=hoge
db.user=hogeuser
db.pass=hogepass
--------------------------------------
message_ja.properties
--------------------------------------
hoge.test2=ほーげー!!
--------------------------------------
i18nを使うので、名前の最後に"_ja"とつける事で国際化対応できます。
_jaに日本語、_enに英語で設定ファイルを記述すればよいわけです。
そうすれば、地域のロケーションによりi18nで使うファイルを選んでくれます。
便利ですね。
次にstruts.xmlに設定します。
struts.xml(一部抜粋)
--------------------------------------
<struts>
<!-- プロパティファイル -->
<constant name="struts.custom.i18n.resources" value="config,message"/>
--------------------------------------
ファイルはカンマ区切りで設定できます。
設定する時は、ロケーションを付加しない所に注意してください。
これでとりあえず設定は終わりです。
やりがちな悪い例は以下の通り。
<constant name="struts.custom.i18n.resources" value="config"/>
<constant name="struts.custom.i18n.resources" value="message"/>
ってやると、struts.custom.i18n.resourcesを2回設定してる事になるので、最初のやつが上書きされてmessageしか使えなくなります。
次に実装
画面で取得するjsp側とJava側で取得するパターンがあると思うので、両方書いておきます。
とりあえずjava側
ActionSupportクラスのgetTextメソッドにて取得できます。
Actionクラスでは元々継承しているので宣言する必要はありませんね。
DAOとか自分で作ったクラスで使いたい場合は、ActionSupportを継承するか、
インスタンス生成してgetTextを呼び出す感じになるかと思います。
私の以前作ったDAOのコネクション作成部分をサンプルとしてメモしておきます。
hogehogeDao.java
--------------------------------------
/**
* コネクションを取得する。
*/
private void getConnection(){
try{
ActionSupport as = new ActionSupport();
Class.forName(as.getText("db.class"));
String dbUrl = as.getText("db.url",new String[]{as.getText("db.host"),as.getText("db.schema")});
conn = DriverManager.getConnection(dbUrl, as.getText("db.user"), as.getText("db.pass"));
conn.setAutoCommit(false);
}catch(SQLException e){
e.printStackTrace();
this.roleBack();
} catch (ClassNotFoundException e) {
e.printStackTrace();
this.roleBack();
}
}
--------------------------------------
Connectionはクラス内変数として定義しています。
String dbUrl = as.getText("db.url",new String[]{as.getText("db.host"),as.getText("db.schema")});
はdb.url=jdbc:mysql://{0}/{1}
にString配列で宣言した値を埋め込んでいます。
こうゆう書き方も出来ます。String[]使うかList<Object>使うかはお好みですね。
List<Object> st = new ArrayList<Object>();
st.add(as.getText("db.host"));
st.add(as.getText("db.schema"));
String dbUrl = as.getText("db.url",st);
validatorの場合、
@RequiredStringValidator(key="sample.test")
で取得できます。
次にjsp側での取得方法です。
<s:text name="sample.test"/>
でいけるっぽいです。
え?って感じですね。