2014-02-10 2 views
0

Я использую FullAjaxExceptionHandler для обработки проблемы с таймаутом в запросе ajax. Проблема, с которой я столкнулась, заключается в обработке javax.faces.view.facelets.FaceletException. Если у меня есть ошибка на странице xhtml, я не хочу показывать трассировку стека, вместо этого показываю страницу с ошибкой. Этого я достиг, указав страницу ошибки в web.xml. Проблема в том, что я хочу зарегистрировать эту ошибку. Я использую log4j для других исключений, но как написать обработчик для FaceletException. Если написать другой обработчик Exception, есть порядок, в котором я должен указать класс обработчика, потому что я уже использую FullAjaxExceptionHandler.Как зарегистрировать конкретное исключение, если я уже использую FullAjaxExceptionHandler

лица-config.xml:

<application> 
    <el-resolver> 
     org.springframework.web.jsf.el.SpringBeanFacesELResolver 
    </el-resolver> 
</application> 
<factory> 
    <exception-handler-factory>org.omnifaces.exceptionhandler.FullAjaxExceptionHandlerFactory</exception-handler-factory> 
</factory> 
<render-kit> 
    <renderer> 
     <component-family>org.primefaces</component-family> 
     <renderer-type>org.primefaces.component.ScheduleRenderer</renderer-type> 
     <renderer-class>com.example.domain.web.custom.MyScheduleRenderrer</renderer-class> 
    </renderer> 
</render-kit> 

ответ

0

Добавление пользовательского обработчика исключений завод в лицах-config.xml

<application> 
    <el-resolver> 
     org.springframework.web.jsf.el.SpringBeanFacesELResolver 
    </el-resolver> 
</application> 
<factory> 
    <exception-handler-factory>com.fetchinglife.domain.web.permissions.CustomExceptionHandlerFactory</exception-handler-factory> 
</factory> 

Создание пользовательского обработчика исключений завод

public class CustomExceptionHandlerFactory extends ExceptionHandlerFactory{ 

private ExceptionHandlerFactory wrapped; 

public CustomExceptionHandlerFactory(ExceptionHandlerFactory wrapped) { 
    this.wrapped = wrapped; 
} 

@Override 
public ExceptionHandler getExceptionHandler() { 
    return new CustomExceptionHandler(wrapped.getExceptionHandler()); 
} 

@Override 
public ExceptionHandlerFactory getWrapped() { 
    return wrapped; 
} 

}

Создать пользовательский обработчик исключений

public class CustomExceptionHandler extends FullAjaxExceptionHandler{ 

static Logger log = Logger 
     .getLogger(CustomExceptionHandler.class); 

public CustomExceptionHandler(ExceptionHandler wrapped) { 
    super(wrapped); 
} 

@Override 
public void handle() throws FacesException { 
    Iterator<ExceptionQueuedEvent> unhandledExceptionQueuedEvents = getUnhandledExceptionQueuedEvents().iterator(); 
    if(unhandledExceptionQueuedEvents.hasNext()){ 
     Throwable exception = unhandledExceptionQueuedEvents.next().getContext().getException(); 
     log.error("FL Error",exception); 
    } 
    super.handle(); 
} 

}

0

К сожалению, кажется, что вы не можете иметь и другое.

  • От JSF Spec, то ExceptionHandlerFactory ожидает один тип должен быть настроен
  • От источника FullAjaxExceptionHandler, если исключение не является Ajax, это вызваны повторно, должны быть обработаны с помощью механизма <error-page>.

Вы должны либо продлить или оберните FullAjaxExceptionHandler, чтобы обеспечить как Ajax и Non-Ajax обработку исключений

+0

был ответ на @baluc, которому я следовал с небольшим изменением. Он отлично работал для меня. Теперь, когда я, когда я хочу сделать ответ, не могу найти ответ. Кто-то удалил этот ответ. –

+0

@VineethNG, возможно, он удалил его сам. Если у вас есть рабочее решение, вы можете отправить ответ самостоятельно – kolossus

 Смежные вопросы

  • Нет связанных вопросов^_^