Apcoordinator ユーザーズガイド |
目次 |
第2部 Apcoordinatorコアの機能 | > 第4章 APIを使ったプログラミング | > 4.6 リソースファイル |
リソースファイルで定義した文字列をJavaプログラムから参照するには、アプリケーションクラスか、UjiResourceクラスを使用して文字列を取得します。
アプリケーションクラス (com.fujitsu.uji.ApplicationProfileクラス) には以下のメソッドがあり、リソースファイルで定義した単一文字列、文字列配列、キー付き文字列を取得できます。
これらのメソッドの引数には取得する文字列の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に対しては、ファイルが以下の順序で検索され、最初に見つかったものが使用されます。
com.fujitsu.uji.util.UjiResourceクラスの以下のstaticメソッドを使用して文字列を取得できます。引数にはDispatchContextクラスと文字列のIDを指定します。
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
この例の場合、以下の順序でリソースファイルが検索されます。
Accept-LanguageヘッダのQ値は使用されません。
UjiResourceクラスは文字列を取得するメソッド以外にも以下の機能を提供します。
データBeanの記述例ここでは、ButtonList型のプロパティblRoomをデータ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; } .... }
リソースファイルの記述例ボタンリストに設定する選択肢を2個定義しています。選択肢のラベルは「101会議室」「102会議室」、選択肢の値はそれぞれ"room101", "room102"です。
<?xml version="1.0" encoding="iso-2022-jp"?> <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>
ビジネスクラスの記述例データBeanからボタンリストの項目クラスを取り出し、initObjectメソッドで選択肢を設定します。"rooms"は、リソースファイルで定義した文字列配列のIDです。
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); ... }
JSPの記述例uji:buttonListタグはボタンリストを表示するUJIタグです。propertyアトリビュートで指定するのは、ボタンリストの項目クラスを型とするプロパティです。項目クラスに設定された選択肢「101会議室」「102会議室」が表示されます。
<uji:buttonList bean="body" property="blRoom" multipleMode="true" columns="3" />
ユーザ定義のクラスに対してinitObjectメソッドを使用することもできます。この場合、ユーザ定義のクラスにcom.fujitsu.uji.util.KeyValueListインタフェースを実装してください。
|
メッセージテンプレートはjava.text.MessageFormat
で使用するフォーマットで記述します。getMessage
メソッドはメッセージテンプレート内の{0},{1}などをそれぞれ対応する補足情報に置き換えてメッセージを作成します。
{0}から{9}まで利用することができます。
com.fujitsu.uji.util.MessageInformationインタフェースを実装しメッセージの情報を格納するクラスを作成します。このクラスのgetMessageIdメソッドでメッセージテンプレートのIDを、getMessageParamsメソッドで補足情報の配列を返却します。
|
DispatchContextとMessageInformation実装クラスを引数にして、getMessageを実行します。getMessageの返却値として、作成されたメッセージの文字列が得られます。
|
以上の例では、getMessageメソッドによって以下の文字列が生成され、返却されます。
|
Webアプリケーションにおいて、getMessageで生成された文字列を画面に表示する場合は、生成された文字列をデータBeanのプロパティに格納し、JSPに記述したUJIタグで表示させます。Webアプリケーションで画面表示を行う方法の詳細は、表示の処理の流れを参照してください。
XMLデータ仕様記述で使用する例外クラスESpecResultExceptionはMessageInformationインタフェースを実装しており、getMessageを使用してデータのチェック結果のメッセージを作成できます。XMLデータ仕様記述についての詳細は XMLデータ仕様記述を参照してください。
目次 |