ひこぽんのーと

覚書と雑記です。

JavaEE 7をやってみよう。 Message Resource その1

validator その3からのつづき

エラーメッセージについては、文言をベタ書きしたくない。
プロパティファイルに別途持ちたい。
どうやって読み込むのだろう。

色々インターネットを漁った結果、下記にたどり着いた。

JSFの標準メッセージを塗り替えるお仕事 - Challenge Java EE !

JSF 2 internationalization example

まず、エラーメッセージに出す項目名について。
h;inputTextタグなどのlable属性に指定した名前が使われるらしい。
ここに指定する文字列をプロパティファイルから取得するようにしたい。

まず、項目名を記載するプロパティファイルを作成する。
これはwar化した際、classesフォルダに内包する必要があるらしいため、
eclipseのプロジェクト(動的Webプロジェクトで試した)上では、javaリソースに含めた。
javaファイルを格納するsrcフォルダの配下にresourcesフォルダを作り、
プロパティファイルを格納した。
ここでは、itemname_xxファイルを項目名、messages_xxをメッセージファイルとした。

  • itemname_ja.properties
input.text7=テキスト7
  • itemname_en.properties
input.text7=text7


f:id:nagamitsu1976:20150730162635p:plain

続いて、これを読み込むための設定をコンフィグファイルに追加。

  • faces-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<faces-config
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
    version="2.2">
    <application>
        <locale-config>
            <default-locale>ja</default-locale>
        </locale-config>
        <message-bundle>resources.message</message-bundle>
        <resource-bundle>
            <base-name>resources.itemname</base-name>
            <var>itemName</var>
        </resource-bundle>        
    </application>
</faces-config>

default-localeはアプリのデフォルトロケール
ここでは日本語:jaを指定した。
項目名ファイルを読ませるため、
Resource-bundleタグを追加し、子要素にbase-name, varを追加する。
Javaリソースフォルダの配下から<パッケージ名>.<ファイル名>を指定する。
ロケールを表す_jaや、拡張子は書かなくて良い。
varはJSFから参照するための変数名だ。

JSFから参照するやり方は次の通り。
Resource-bundleタグで指定したvarの名前を用いて
#{リソース名['キー'])
の形式で取得できる。

    <h:form id="form2">
        <h:outputLabel value="Resource" /><br />
        <h:inputText id="text7" required="true" label="#{itemName['input.text7']}" />
        <h:commandButton value="submit" /><br />
        <h:message for="text7" id="text7error" style="color: red" />
        <hr/>
    </h:form>

message-bundleタグについては、その2に持ち越す。
その2へつづく。