リソースファイルで定義した文字列をJavaプログラムから参照するには、アプリケーションクラスか、UjiResourceクラスを使用して文字列を取得します。
アプリケーションクラスからの取得
アプリケーションクラス(com.fujitsu.uji.ApplicationProfileクラス)には以下のメソッドがあり、リソースファイルで定義した単一文字列、文字列配列、キー付き文字列を取得できます。
getResourceTextメソッド: 単一文字列を取得します
getResourceArrayメソッド: 文字列配列を取得します
getResourceMapメソッド: キー付き文字列配列を取得します
これらのメソッドの引数には取得する文字列のIDを指定します。以下は記述例です。
import com.fujitsu.uji.ApplicationProfile; import com.fujitsu.uji.DispatchContext; import java.util.Map; ... public void startup(DispatchContext context) { ApplicationProfile ap = context.getApplicationProfile(); // 単一文字列の取得 String targetStr = ap.getResourceText("target"); // 文字列配列の取得 String[] priorStr = ap.getResourceArray("prior"); // キー付き文字列配列の取得 Map.Entry[] roomsStr = ap.getResourceMap("rooms"); ... }
第2引数にロケール ( java.util.Localeクラス) を指定すると、そのロケールに対応するリソースファイルが検索されて使用されます。例えば、ロケールja_JPに対しては、ファイルが以下の順序で検索され、最初に見つかったものが使用されます。
ujiresource_ja_JP.xml
ujiresource_ja.xml
ujiresource.xml
UjiResourceクラスからの取得
com.fujitsu.uji.util.UjiResourceクラスの以下のstaticメソッドを使用して文字列を取得できます。引数にはDispatchContextクラスと文字列のIDを指定します。
getResourceTextメソッド: 単一文字列を取得します
getResourceArrayメソッド: 文字列配列を取得します
getResourceMapメソッド: キー付き文字列配列を取得します
import com.fujitsu.uji.DispatchContext; import com.fujitsu.uji.util.UjiResource; import java.util.Map; ... public void startup(DispatchContext context) { // 単一文字列の取得 String targetStr = UjiResource.getResourceText(context, "target"); // 文字列配列の取得 String[] priorStr = UjiResource.getResourceArray(context, "prior"); // キー付き文字列配列の取得 Map.Entry[] roomsStr = UjiResource.getResourceMap(context, "rooms"); .... }
Webアプリケーションでは、HTTPリクエストからロケールが取得されます。HTTPのリクエストヘッダにAccept-Languageヘッダが存在する場合、Accept-Languageヘッダで指定されたロケールに対応するリソースファイルが使用されます。以下はAccept-Languageヘッダの例です。
Accept-Language: ja,en-us;q=0.5
この例の場合、以下の順序でリソースファイルが検索されます。
ujiresource_ja.xml
ujiresource_en_US.xml
ujiresource_en.xml
ujiresource.xml
Accept-LanguageヘッダのQ値は使用されません。
UjiResourceクラスは文字列を取得するメソッド以外にも以下の機能を提供します。
コンボボックス、リストボックス、ボタンリストの項目クラスの初期化
UjiResourceクラスのinitObjectメソッドはコンボボックス、リストボックス、ボタンリストの項目クラスの選択肢情報として、リソースファイルに定義したキー付き文字列配列を設定します。キーが選択肢の値として、文字列が選択肢の表示文字列として使用されます。以下は、ボタンリストの項目クラスに文字列配列を設定する例です。
・データBeanの記述例
import com.fujitsu.uji.DataBean; import com.fujitsu.uji.compo.ButtonList; public class MyDataBean extends DataBean { protected ButtonList blRoom = new ButtonList(); .... public ButtonList getBlRoom() { return blRoom; } .... }
ここでは、ButtonList型のプロパティblRoomをデータBeanに作成しています。
・リソースファイルの記述例
<?xml version="1.0" encoding="Shift_JIS"?> <ujiResource xmlns=http://interstage.fujitsu.com/schemas/uji/ujiResource xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xsi:schemaLocation="http://interstage.fujitsu.com/schemas/uji/ujiResource http://interstage.fujitsu.com/schemas/uji/ujiresource.xsd"> <config> <version>5.1</version> </config> <map id="rooms"> <elem key="room101">101会議室</elem> <elem key="room102">102会議室</elem> </map> </ujiResource>
ボタンリストに設定する選択肢を2個定義しています。選択肢のラベルは「101会議室」「102会議室」、選択肢の値はそれぞれ"room101"、"room102"です。
・ビジネスクラスの記述例
import com.fujitsu.uji.DispatchContext; import com.fujitsu.uji.compo.ButtonList; import com.fujitsu.uji.util.UjiResource; ... public void startup(DispatchContext context) { MyDataBean bean = new MyDataBean(); ... ButtonList blRoom = bean.getBlRoom(); UjiResource.initObject(context, "rooms", blRoom); ... }
データBeanからボタンリストの項目クラスを取り出し、initObjectメソッドで選択肢を設定します。"rooms"は、リソースファイルで定義した文字列配列のIDです。
・JSPの記述例
<uji:buttonList bean="body" property="blRoom" multipleMode="true" columns="3" />
uji:buttonListタグはボタンリストを表示するUJIタグです。propertyアトリビュートで指定するのは、ボタンリストの項目クラスを型とするプロパティです。項目クラスに設定された選択肢「101会議室」「102会議室」が表示されます。
ユーザ定義のクラスに対してinitObjectメソッドを使用することもできます。この場合、ユーザ定義のクラスにcom.fujitsu.uji.util.KeyValueListインタフェースを実装してください。
メッセージテンプレートからのメッセージの作成
UjiResourceクラスのgetMessageメソッドは、文字列のID、補足情報、リソースファイルに定義したメッセージテンプレートからメッセージの文字列を作成します。メッセージの一部に動的に情報を埋め込みたい場合に使用します。
メッセージテンプレートはリソースファイルに単一文字列として定義します。
<text id="RESVPT">{0}件中{1}件を予約しました。内容を確認してください。</text>
メッセージテンプレートはjava.text.MessageFormatで使用するフォーマットで記述します。getMessageメソッドはメッセージテンプレート内の{0},{1}などをそれぞれ対応する補足情報に置き換えてメッセージを作成します。
{0}から{9}まで利用することができます。
com.fujitsu.uji.util.MessageInformationインタフェースを実装しメッセージの情報を格納するクラスを作成します。このクラスのgetMessageIdメソッドでメッセージテンプレートのIDを、getMessageParamsメソッドで補足情報の配列を返却します。
import com.fujitsu.uji.util.MessageInformation; class Message implements MessageInformation { String id; Object[] params; public Message(String id, Object[] params) { this.id = id; this.params = params; } public String getMessageId() { return id; } public Object[] getMessageParams() { return params; } }
DispatchContextとMessageInformation実装クラスを引数にして、getMessageを実行します。getMessageの返却値として、作成されたメッセージの文字列が得られます。
import com.fujitsu.uji.DispatchContext; import com.fujitsu.uji.util.UjiResource; ... public void startup(DispatchContext context) { Message msg = new Message("RESVPT", new String[]{"3","2"}); String msgStr = UjiResource.getMessage(context, msg); ... }
以上の例では、getMessageメソッドによって以下の文字列が生成され、返却されます。
3件中2件を予約しました。内容を確認してください。
ポイント
Webアプリケーションにおいて、getMessageで生成された文字列を画面に表示する場合は、生成された文字列をデータBeanのプロパティに格納し、JSPに記述したUJIタグで表示させます。Webアプリケーションで画面表示を行う方法の詳細は、“15.3.1 表示の処理の流れ”を参照してください。
XMLデータ仕様記述で使用する例外クラスESpecResultExceptionはMessageInformationインタフェースを実装しており、getMessageを使用してデータのチェック結果のメッセージを作成できます。XMLデータ仕様記述についての詳細は“第11章 XMLデータ仕様記述”を参照してください。