ExceptionHandlerWrapper
抽象クラスとの特殊化を通じて、JSFでグローバル例外処理のメカニズムを実装しようとしていExceptionHandlerFactory
ます。ただし、JSFライフサイクルのレンダリング応答フェーズで例外がスローされた場合、例外はスタックされないため(Phase.queueExceptionが呼び出されることはありません)、特殊なクラスのハンドルメソッドにキャプチャされませんExceptionHandlerWrapper
。
次のコードフラグメントは、前述の問題が発生する状況をまとめたものです。
JSF:
<h:form id="formManterLider">
<h:selectOneMenu>
...
<p:ajax update=":formManterLider" listener="#{MB.atualizarListaLideresInstituicao}" />
...
</h:selectOneMenu>
<p:dataTable value="#{MB.lazyModel}" ... />
</h:form>
Java:
@ManagedBean
@ViewScoped
public class MB {
...
private LazyDataModel<LiderVO> lazyModel = new LazyDataModel<LiderVO>() {
@Override
public List<LiderVO> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {
...
List<LiderVO> lista = consultarLideresCandidatos(getInstituicaoSelecionada(), first, pageSize); // throws a RuntimeException
return lista;
}
};
}
h:selectOneMenu
AJAXリクエストを介してコンポーネントの選択値を変更すると、問題が発生します。これは、ステートメントupdate=":formManterLider"
によってload
レンダリング応答フェーズ中にメソッドconsultarLideresCandidatos
が呼び出され、メソッド内で呼び出されるメソッドが。load
をスローするためRuntimeException
です。
を特殊化するクラスを使用して、レンダリング応答フェーズでスローされた例外を検出する方法を知りたいですExceptionHandlerWrapper
。
注:私はMojarra2.1.12とPrimefaces3.2を使用しています。