我正在尝试通过抽象类ExceptionHandlerWrapper
和ExceptionHandlerFactory
. 但是,当在 JSF 生命周期的渲染响应阶段抛出异常时,它不会被堆叠(从不调用Phase.queueException),因此不会在专门化的类的handleExceptionHandlerWrapper
方法中捕获。
以下代码片段总结了出现上述问题的情况。
JSF:
<h:form id="formManterLider">
<h:selectOneMenu>
...
<p:ajax update=":formManterLider" listener="#{MB.atualizarListaLideresInstituicao}" />
...
</h:selectOneMenu>
<p:dataTable value="#{MB.lazyModel}" ... />
</h:form>
爪哇:
@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;
}
};
}
通过 AJAX 请求更改h:selectOneMenu
组件中的选择值会触发该问题,因为该语句update=":formManterLider"
会导致load
在渲染响应阶段调用该方法consultarLideresCandidatos
,而在该方法中调用的load
方法会抛出一个RuntimeException
.
我想知道如何使用专门的类来检测渲染响应阶段抛出的异常ExceptionHandlerWrapper
。
注意:我使用的是 Mojarra 2.1.12 和 Primefaces 3.2。