无法处理JSF渲染异常

时间:2014-06-25 08:39:01

标签: jsf-2 richfaces

在tomcat7上使用mojarra 2.1.27和richfaces 4.3.6,我试图为ajax请求实现自己的异常处理程序(遵循所有建议),但我永远无法访问渲染异常。

我有通过web.xml <error-page>指令处理的正常回发异常,它工作正常,并且ajax请求应该通过我的自定义处理程序。这似乎在更新值和调用操作时有效,但在渲染阶段没有异常。

拥有这个简单的ajax命令按钮

<a4j:commandButton execute="@this" action="#{testController.actionButton4}"
    render="@form" value="Ajax Post + Render Error"/>

其中(以及其他)呈现带有结果的div

<div id="result">
  #{testController.result}
</div>

TestController

中的简单操作提供支持
public String actionButton4() {
  result = "action4";
  inError = true;
  return null;
}

在渲染过程中使用的简单getter。

public String getResult() {
  if (inError) {
    inError = false;
    throw new RuntimeException("Render error in " + result);
  }
return result;
}

我的处理程序或多或少地执行默认行为

 public void handle() throws FacesException {
   dohandle();
   getWrapped().handle();
 }

 public void dohandle() throws FacesException {
   FacesContext fc = FacesContext.getCurrentInstance();
   PhaseId phaseId = fc.getCurrentPhaseId();
   boolean partialRequest = fc.getPartialViewContext().isPartialRequest();
   boolean ajaxRequest = fc.getPartialViewContext().isAjaxRequest();
   Iterator<ExceptionQueuedEvent> iterator = getUnhandledExceptionQueuedEvents().iterator();

   log.trace("Phase id ({})", phaseId);
   while (iterator.hasNext()) {
      log.trace("Request is partial ({}). Request is ajax ({})", partialRequest, ajaxRequest);
      if (!ajaxRequest) {
         return;
      }
      ...
   }
 }

我在渲染过程中看到的是richfaces的ExtendedPartialViewcontextImpl中的日志记录异常

Jun 25, 2014 10:18:44 AM org.richfaces.context.ExtendedPartialViewContextImpl$RenderVisitCallback logException
SEVERE: /test2.xhtml: Error reading 'result' on type c.n.g.w.controller.TestController
...

然后我看到阶段结束并且咨询了异常处理程序

10:18:44.336 {http-bio-8080-exec-2} TRACE c.n.g.w.generic.LifeCycleListener - END PHASE RENDER_RESPONSE 6
10:18:44.336 {http-bio-8080-exec-2} TRACE c.n.g.w.generic.ExceptionHandler - Phase id (RENDER_RESPONSE 6)

但由于某种原因,队列中没有未处理的异常。

我找不到任何说明RF渲染应该与其他人有任何不同的反应,但我怀疑它可能是。有没有人比我更了解?

更新

我从客户端日志中注意到渲染的输出在EL标记处被剪切,因此渲染会因某种原因而中断并提交部分结果。

0 个答案:

没有答案