目次へ

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タグで、リソースにある値を表示させる事。
  • ブラウザから要求する言語によって、表示されるメッセージがどのように変わるか確認する事。

解答例はこちら

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp