JSFでのメッセージにpropertiesファイルを使う
JSFでメッセージをpropertiesファイルに書く方法を調べてみました。
具体的には、以下を行う方法の調査です。
StrutsのActionMessageと同等の機能ですね。
なおプレースホルダは、{0}とか{1}をメッセージに含めておいて実行時に置換する機能のことです。
本当はBean Validationみたく{max}のように名前で書ければいいんですが、ResourceBundleの域を超えるのでムリな気がします。これは大目に見ます。
調査結果
いろいろ調べて一応出来たのですが、これが信じられないくらいめんどくさい。
まず準備。
- propertiesファイルを作成
- faces-config.xmlにpropertiesファイルをリソースバンドルとして登録
そしてFacesMessageを得るには
- FacesMessage.FACES_MESSAGES、あるいはFacesContext.getCurrentInstance().getApplication().getMessageBundle()で得られる名前のResourceBundleを取得して
- java.text.MessageFormatを使ってプレースホルダを解決して
- FacesMessageオブジェクトを作る
とやります。
・・・めんどくさい・・・特にResourceBundleの取得が。
プレースホルダも自前で解決する必要があります。