ManagedBeanとJSFでメッセージのやり取りをする場合、直接メッセージを変数として持たせるよりは、JSFの仕組みを通じてメッセージを出力させたほうが適切です。
Contents
エラーメッセージの出力
一番多いのは入力フォームなどのエラーメッセージを出力する方法です。
これは対象の変数にアノテーションを付与し、messageタグのlabel属性でinputと結び付けてあげれば出力が可能です。
ManagedBean側
1 2 3 4 |
@Getter @Setter @Size(max=1,min=20) private String code; |
JSF側
1 2 |
<h:inputText id="code" value="#{productAddBean.code}" /> <h:message for="code" styleClass="alert alert-error" /> |
これで画面からcodeが1文字~20文字の文字列でない限りは自動的にエラーメッセージが吐かれ、そうでないときは何も出力されません。
任意の出力
難しいのはこのような変数とメッセージが1対1でないときです。
例えばデータベースへ何らかのデータが入力され、成功時と失敗時にメッセージを出力したいとします。
その場合、JSFのメソッドをManagedBeanの中から呼び出してあげればOKです。
1 |
FacesContext.getCurrentInstance().addMessage(clientId, new FacesMessage(message)); |
clientIdとはコンポーネント上のIDです。
ここがJSFは通常のHTMLと違います。
単純にそのメッセージのIDではなく、inputの場合、formが親になりますので、親ID:子IDとなります。
下記のようなコードになります。
ManagedBean側
1 |
FacesContext.getCurrentInstance().addMessage("parentId:childrenId", new FacesMessage("データベースに登録しました。")); |
JSF側
1 2 3 |
<h:form id="parentId" > ・・・・・・・・・・・・・・・ <h:message for="hoge" id="childrenId" /> |
ちなみに全てのメッセージをまとめて出力したいときは
1 |
<h:messages /> |
で出力できます。