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層のものに汚染されることも防げます。