4. Beanタグライブラリ2
この章では、Beanタグライブラリにおける残りの主要なタグについて説明します。
4.1. messageタグ
messageタグはメッセージリソースからメッセージを検索して表示するタグです。また多言語対応しており、ロケールに応じて表示するメッセージの切り換えが可能です。リソースバンドルに似ていると言えるでしょう。まずmessageタグを使用する前に、メッセージリソースをアプリケーションに登録する方法について説明します。メッセージリソースの登録はStruts設定ファイル内で行います。
<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"> <struts-config> ... <message-resources parameter="sample.ApplicationResources" /> </struts-config>
<message-resources>タグを用いてメッセージリソースの登録を行います。タグの場所は<action-mappings>よりも後ろで、<struts-config>のほぼ一番最後です。詳細についてはStruts付属のDTDファイルを参考にして下さい。message-resourcesタグの属性で使用するのはparameterのみです。ここにメッセージリソースの基底名を指定します。
さてメッセージリソース自体はプロパティファイルで作成します。そのファイル名はリソースバンドルと同じ形式を取ります。
(基底名)_(ロケール).properties
サンプルで日本語のメッセージリソースを作成する場合は、「sample.ApplicationResources_ja_JP.properties」か「sample.ApplicationResources_ja.properties」。英語の場合は、「sample.ApplicationResources_en.properties」などとなります。ロケールを省略して、「sample.ApplicationResources.properties」でも構いません。検索方法もリソースバンドルと同じなので、該当する場合が無い場合にのみ、ロケールのないメッセージリソースが使用されます。
またメッセージリソースの検索場所もリソースバンドルと同じで、CLASSPATHから検索されます。Servletの場合は「WEB-INF/classes」ディレクトリがCLASSPATHのルートになるので、プロパティファイルもこれ以下に置く必要があります。従ってサンプルの場合は「WEB-INF/classes/sample」以下に「ApplicationResources_(ロケール).properties」というファイルを置かなければなりません。
最後にmessageタグの説明に戻ります。messageタグで主に使用されるのはkey属性で、メッセージリソースからメッセージを検索する場合に使用されます。例えばメッセージリソースに
hello=Hello World!
というプロパティがあり、JSPページに
<bean:message key="hello" />
とあると、「Hello World!」というメッセージが表示される事になります。その他の主要な属性は以下の通りです。
属性名 | 必須 | スクリプト 可能 |
説明 |
---|---|---|---|
arg0〜arg4 | ○ | 値がjava.text.MessageFormatの形式に従うものであった場合に、それぞれのパラメータにセットする値を指定します。 | |
name | ○ | key属性が指定されていない場合、代わりに検索として使用されるキーの値が格納されているBeanの名前を指定します。property属性とセットで使用します。 | |
property | ○ | key属性が指定されていない場合、代わりに検索として使用されるキーの値が格納されているBeanのプロパティ名を指定します。name属性とセットで使用します。 |
messageタグにおいても、リソースバンドルと同じくロケールに応じたメッセージリソースからプロパティが検索されます。しかしその際のロケールは、クライアントのロケールに従います。クライアントのロケールの判断には、HTTPのAccept-Languageヘッダが使用されます。多くのブラウザには、このヘッダの値を変更する機能があります。
なおメッセージリソースは、ActionServletの起動時(struts-config.xmlが読み込まれる時)に読み込まれます。従ってmessageタグを使用する場合には、予めActionServletが起動している必要があります。以下のようにweb.xmlでActionServletに<load-on-startup>要素を指定すると良いでしょう。注意してください。
<servlet> <servlet-name>Action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> ... </init-param> <load-on-startup>1</load-on-startup> </servlet>
(実習課題1)
以下のWebアプリケーションを、Strutsを用いて作成しなさい。
- 複数のロケールに対応したリソースを用意する事。
- messageタグで、リソースにある値を表示させる事。
- ブラウザから要求する言語によって、表示されるメッセージがどのように変わるか確認する事。