メッセージ情報の設定
wisdomではアプリケーションで使用するメッセージは.propertiesに記述して利用します。
メッセージへの文字埋め込み
このクラスが行うことは単純です。使用するメッセージのコードを指定し、引数で埋め込む文字列を指定することで表示するメッセージ文字列を含んだwisdom.core.Messageオブジェクトを生成します。
埋め込み位置は"{n}"形式で指定します。半角の中括弧でくくり、nには番号を指定します。nはメソッドの引数の位置に対応します。
AppMessageGeneratorが使用する.propertiesに下のようなメッセージが記述されていたとします。
例).propertiesファイル
MSG0010=シンプルなメッセージ
MSG0011=埋め込みメッセージ。あなたは{0}です。
MSG0012=埋め込みメッセージ。あなたは{0}な{1}です。
MSG0013=埋め込みメッセージ。あなたは{0}で{1}な{2}です。
例)AppMessageGeneratorの取得
MessageGenerator messageGenerator = AppMessageGenerator.getInstance();
AppMessageGeneratorはシングルトンで実装されているために、上の方法でインスタンスを取得します。
(※ほとんどの場合、上のコードを個別に書く必要はありません。後述を参照してください。)
例)Messageの作成
MessageGenerator messageGenerator = AppMessageGenerator.getInstance();
Message message1 = messageGenerator.getMessasge("MSG0010");
Message message2 = messageGenerator.getMessasge("MSG0011","Java開発者");
Message message3 = messageGenerator.getMessasge("MSG0010","堅実","Java開発者");
Message message4 = messageGenerator.getMessasge("MSG0010", new
String[] {"優秀","堅実","Java開発者"});
String text1 = message1.getText(); /* text1の値は "シンプルなメッセージ" になります。*/
String text2 = message2.getText(); /* text2の値は "埋め込みメッセージ。あなたはJava開発者です。" になります。*/
String text3 = message3.getText(); /* text3の値は "埋め込みメッセージ。あなたは堅実なJava開発者です。" になります。*/
String text4 = message4.getText(); /* text4の値は "埋め込みメッセージ。あなたは優秀で堅実なJava開発者です。" になります。*/
.propertiesファイルの配置場所の指定
AppMessageGeneratorは初期時にwisdom_config.xmlを参照し、以下の要素を参照します。idが"app.message.resource"のvalue属性の値を参照し、使用する.propertiesファイルを決定します。適宜変更してください。
(変更は可能ですが、あえて変える必要もないケースが多いので固定として考えてしまってもいいでしょう。ただし、下の要素がwisdom_config.xmlに必要だということは覚えておいてください。)
例)wisdom_config.xmlの設定
<parameter category='message' id='app.message.resource' value='messageResources.AppMessageResource'/>
MessageGeneratorインターフェースをインスタンス変数として持つクラス
アプリケーションを作成していく上で、メッセージを生成する必要があるクラスは限定されてきますので、それらのクラスではインスタンス変数としてAppMessageGeneratorをMessageGeneratorインターフェースとして持っています。
必要があれば、上記のように個別にインスタンスを取得します。また、アプリケーションでは「メッセージの生成にはAppMessageGeneratorしか使ってはならん!」というルールを適用すれば必然的にメッセージ資源の局所化を図ることになります。
AppMessageGeneratorをインスタンス変数として持つクラスのすべてを説明することはできませんが、以下のようなクラスがあります。
- wisdom.core.application.AbstractRequestCommand
- wisdom.core.application.AbstractBatchCommand
- wisdomx.logic.formtemplate.AbstractFormObjectPersistance