2

Primefacesを使用してajax送信を行っていますが、サーバー側のメッセージをajaxリクエストにリンクするのに問題があります。アクションを呼び出すこのボタンがあるとします。管理対象Beanで、例外を発生させる必要がありますか?このメッセージをajaxリクエストに渡すにはどうすればよいですか?

public void checkout(ActionEvent event){
    if(expression){
        throw new CustomException("Account balance is not enough!");
    }
}

public class CustomException extends RuntimeException { 
    public CustomException(String message) {
        super(message);
    }
}

このケースをどのように処理しますか?私のonerrorjavascriptメソッドはこれを処理できますか?

また、あるケースではDBがダウンしていると想定されていますが、例外を処理するにはどうすればよいですか?javascript関数のエラーメッセージにアクセスしましたか?

public void checkout(ActionEvent event){
    try{
        //DB is down
        if(expression){
            throw new CustomException("Account balance is not enough!");
        }
    }catch(Exception e){

    }
}
4

1 に答える 1

4

具体的な質問については、ajaxリクエストで例外が発生した場合に基本的ExceptionHandlerに次のことを行うカスタムを実装する必要があります。

String errorPageLocation = "/WEB-INF/errorpages/500.xhtml";
context.setViewRoot(context.getApplication().getViewHandler().createView(context, errorPageLocation));
context.getPartialViewContext().setRenderAll(true);
context.renderResponse();

web.xmlエラーページを考慮に入れたい場合、これは必ずしも簡単なことではありません。web.xmlエラーページの場所を見つけるには、このために全体を解析する必要があります。OmniFacesユーティリティライブラリには、まさにそのような例外ハンドラ、がありFullAjaxExceptionHandlerます。完全なソースコードはここにあり、ショーケースの例はここにあります

具体的な機能要件については、ユーザーエラーだけでも例外はありません。これは完全に回復可能です。、またはFacesMessageを更新するには、を作成して追加し、ajaxを使用する必要があります。PrimeFacesのものは、ajaxリクエストでそれ自体を自動更新するをサポートします。例えば<h:messages><p:messages><p:growl>autoUpdate="true"

context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Insufficient balance", null));

<p:messages autoUpdate="true" />

例外をスローすることは、DBがダウンしているときなどの回復不能な状況でのみ意味があります。通常、このような例外を自分でスローしないことに注意してください。JPAの場合はすでにスローされPersistenceExceptionているため、JSFマネージドBeanをキャッチするべきではなく、そのまま放します。

于 2012-05-22T16:20:36.233 に答える