読者です 読者をやめる 読者になる 読者になる

FacesMessageでのSeverityに応じたスタイル指定

Seasar2 Teeda

JSFでは、何でエラーメッセージと通知用のメッセージを分けられないのだろう、って思っていたんですが、FacesMessageクラスにはseverityプロパティがあって、メッセージのレベルを指定できたんですね。

知りませんでした(汗)


JSFの h:messages タグでは、各レベルに合わせた class や style 属性が指定できるようです。
なるほど。

http://java.sun.com/javaee/javaserverfaces/1.2/docs/tlddocs/h/messages.html


現在のTeedaの仕様では、

id 出力内容
allMessages 全てのメッセージ
messages 項目にヒモ付かないメッセージ
id+Message 指定されたidにヒモ付くメッセージ

ということになっていますが、レベルに応じてスタイルを変更するにはどうするのでしょうか?


・・・と、調べてみたら、現在のバージョン(Ver1.0.6)でも、実現する方法があるようですね。

  • HTMLの定義
<span id="allMessages" errorClass="errorMessage"></span>
  • 実際の出力
<ul id="allMessages">
  <li><span class="errorMessage">値を入力してください</span></li>
</ul>

上の例は、バリデーションエラー時の指定ですが、他のレベルの場合も同様に指定できます。

<span id="allMessages" fatalClass="fatalMessage"
                       errorClass="errorMessage"
                       warnClass="warnMessage"
                       infoClass="infoMessage">
</span>

うーん、知らなかった。Teeda Core のみならず、Teeda Extenstion でも指定できるのって、仕様!?
でも、これなら、メッセージ表示のプロパティをアプリケーション独自に作りこまなくても済みますね。

属性が、Pure HTML ではないですが、まあ、特に問題でもないでしょう。


Page(もしくはAction)側では、以下のようにメッセージを指定すれば良いですね。

FacesMessageUtil.addFatalMessage(messageId);
FacesMessageUtil.addErrorMessage(messageId);
FacesMessageUtil.addWarnMessage(messageId);
FacesMessageUtil.addInfoMessage(messageId);


※2007/03/22 追記
Teeda Extension的には、次のように指定するのが正しいとのこと。

    • 「te:」付けました。名前空間の指定を忘れないように。
<html xmlns:te="http://www.seasar.org/teeda/extension">

<span id="allMessages" te:fatalClass="fatalMessage"
                       te:errorClass="errorMessage"
                       te:warnClass="warnMessage"
                       te:infoClass="infoMessage">
</span>