Validatorじゃないロジックで失敗したときのエラーメッセージの出し方


Teedaでは画面からの値の検証はJSFのValidatorを使います。

一般的な入力チェック類はほとんどこれでまかなえます。

(標準で準備しているもので足りない場合は、個別に作成しておいたほうが良いです。そんなに難しくありません。)

しかしそれ以外のロジックでエラーになったときには、どうするのでしょうか。

簡単です。Validatorと同様にFacesContextにメッセージを詰めてしまえばいいのです。

if(someLogicFail) {
  facesContext.addMessage("clientId", new FacesMessage("summary_key", "detail_key"));
}


clientIdのところは、messageで出力する場合には指定しなくてはいけません。

formのidがformで入力項目のidがaaaとすると、form:aaaのようになります。


が、allMessagesかmessagesで画面上部などにまとめて表示する場合は必要ありません。


(追記)

ひとつ言い忘れてました。

サービス層以降のエラーを自画面に戻して表示したい場合には、AppThrowsInterceptorを使うと簡単に出来ます。

Web層以外はJSFになるべく依存させたくないので、普通にRuntimeException(Seasarな環境で言えば、

SRuntimeExceptionで良いですね)を投げると、AppThrowsInterceptorはgetMessageしてメッセージを

取り出して、FacesContextにつめてくれます。

これでService層以降がWeb層のものに汚染されることも防げます。