JSF 2 を使用していて、Web サービスを使用しているときに例外が発生しました。その例外をキャッチして、ページにメッセージを表示したいと考えてい.xhtml
ます。
どうやってやるの?
JSF 2 を使用していて、Web サービスを使用しているときに例外が発生しました。その例外をキャッチして、ページにメッセージを表示したいと考えてい.xhtml
ます。
どうやってやるの?
ブロックを使用してtry-catch
、例外をキャッチして処理できます。を使用FacesContext#addMessage()
して、faces メッセージを faces コンテキストに追加できます。<h:messages>
顔のメッセージを表示するために使用できます。
したがって、Bean では次のようになります。
try {
data = yourWebService.retrieve();
} catch (YourWebServiceException e) {
String message = "Failed to retrieve data from webservice: " + e.getMessage());
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_INFO, message, null));
e.printStackTrace(); // Or use a logger.
}
そしてこれはJSFページにあります:
<h:messages globalOnly="true" />
( はクライアント IDを持つメッセージのみを表示するglobalOnly="true"
ように強制します)<h:messages>
null
BalusC が説明したことの例を挙げると、catch ステートメントで呼び出される単純なメソッドを書くことができます。
private void addErrorMessage(String msg, String clientId) {
String codingErrorMsgKey = "coding_error_msg";
FacesMessage fm;
FacesContext facesContext = FacesContext.getCurrentInstance();
if (StringUtils.isEmpty(msg)) {
ResourceBundle bundle = facesContext.getApplication().getResourceBundle(facesContext, "bundle");
fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, bundle.getString(codingErrorMsgKey), bundle.getString(codingErrorMsgKey));
}
else {
fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, msg, msg);
}
facesContext.addMessage(clientId, fm);
}
このメソッドが行うことは非常に単純です。アプリケーションのリソース バンドルから以前に解決した可能性があるというメッセージをメソッドに与えると、グローバル (clientId が null の場合のみ) エラー (が原因でFacesMessage.SEVERITY_ERROR
)FacesMessage
が作成されます。facesContext
作成されたエラー メッセージは、何も指定しなかった場合、デフォルトの文字列をメッセージとして使用してに追加されます。
このメソッドはグローバルおよび clientId 関連のエラー メッセージを作成できるため、プロパティを使用する必要はありませんglobalOnly
。<h:messages/>
タグにすべてのメッセージ (グローバルかどうかに関係なく) を表示するように指定するだけです。
繰り返しますが、これはサンプル コードです。独自のものにするために、調整/改善が必要になる場合があります。また、このメソッドをほぼ複製して、情報メッセージを処理することもできます。
エラー メッセージを処理する一般的な方法として、このメソッドをスーパー クラスで使用できるようにし、すべてのコントローラーを拡張することができます。