首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不调用OmniFaces FullAjaxExceptionHandler的OmniFaces方法的重写

不调用OmniFaces FullAjaxExceptionHandler的OmniFaces方法的重写
EN

Stack Overflow用户
提问于 2014-01-20 14:48:21
回答 1查看 821关注 0票数 2

在ajax请求期间,我使用OmniFaces (1.7) FullAjaxExceptionHandler来处理(ViewExpired)异常。

我不希望FullAjaxExceptionHandler像默认实现那样记录严重级别的异常。因此,我确实重写了logException方法,但是仍然调用默认方法,而不是重写的方法。

我已在下列工厂注册:

代码语言:javascript
复制
  <factory>
    <exception-handler-factory>my.package.ViewExpiredExceptionHandlerFactory</exception-handler-factory>
  </factory>

  <factory>
      <exception-handler-factory>org.omnifaces.exceptionhandler.FullAjaxExceptionHandlerFactory</exception-handler-factory>
  </factory>

这是我的ViewExpiredExceptionHandlerFactory

代码语言:javascript
复制
public class ViewExpiredExceptionHandlerFactory extends ExceptionHandlerFactory {

  private ExceptionHandlerFactory parent;

  public ViewExpiredExceptionHandlerFactory(ExceptionHandlerFactory parent) {
    this.parent = parent;
  }

  @Override
  public ExceptionHandler getExceptionHandler() {
    ExceptionHandler result = parent.getExceptionHandler();
    result = new ViewExpiredExceptionHandler(result);

    return result;
  }

}

和扩展的FullAjaxExceptionHandler

代码语言:javascript
复制
public class ViewExpiredExceptionHandler extends FullAjaxExceptionHandler {

  private static final Logger LOGGER = Logger.getLogger(ViewExpiredExceptionHandler.class);

  private ExceptionHandler wrapped;

  public ViewExpiredExceptionHandler(ExceptionHandler wrapped) {
    super(wrapped);
    this.wrapped = wrapped;
  }

  @Override
  public ExceptionHandler getWrapped() {
    return this.wrapped;
  }

  @Override
  public void logException(FacesContext context, Throwable exception, String location, String message, Object... parameters) {
    String user = UserFilter.readUserIdFromSession();
    LOGGER.info("The view/session has expired for user " + (user == null ? "null" : user));
  }

}

我是不是遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-20 14:59:20

FullAjaxExceptionHandlerFactory中删除faces-config.xml条目。现在,基本上有两个完全不同的异常处理程序实例,每个实例各自执行自己的操作,后者注册的实例包装(因此优先于)先前注册的实例。但是,一旦遇到ajax异常,FullAjaxExceptionHandler本身并不会委托给包装的异常。

所以,你所需要的只是:

代码语言:javascript
复制
<factory>
    <exception-handler-factory>my.package.ViewExpiredExceptionHandlerFactory</exception-handler-factory>
</factory>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21236920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档