1

JSF 2 を使用していて、Web サービスを使用しているときに例外が発生しました。その例外をキャッチして、ページにメッセージを表示したいと考えてい.xhtmlます。

どうやってやるの?

4

2 に答える 2

3

ブロックを使用して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

于 2012-11-09T00:04:15.053 に答える
0

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/>タグにすべてのメッセージ (グローバルかどうかに関係なく) を表示するように指定するだけです。

繰り返しますが、これはサンプル コードです。独自のものにするために、調整/改善が必要になる場合があります。また、このメソッドをほぼ複製して、情報メッセージを処理することもできます。

エラー メッセージを処理する一般的な方法として、このメソッドをスーパー クラスで使用できるようにし、すべてのコントローラーを拡張することができます。

于 2012-11-09T14:38:00.187 に答える