아약스 요청 중 (ViewExpired) Exception을 처리하기 위해 OmniFaces (1.7) FullAjaxExceptionHandler을 사용하고 있습니다.OmniFaces의 logException 메소드 대체 FullAjaxExceptionHandler가 호출되지 않습니다.
기본 구현 에서처럼 SEVERE 수준의 예외를 로그하는 데 FullAjaxExceptionHandler를 사용하고 싶지 않습니다. 따라서 logException 메서드를 재정의했지만 재정의 된 메서드가 아닌 기본 메서드가 여전히 호출됩니다.
나는 다음과 같은 공장 등록 :
여기<factory>
<exception-handler-factory>my.package.ViewExpiredExceptionHandlerFactory</exception-handler-factory>
</factory>
<factory>
<exception-handler-factory>org.omnifaces.exceptionhandler.FullAjaxExceptionHandlerFactory</exception-handler-factory>
</factory>
내 ViewExpiredExceptionHandlerFactory입니다
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
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));
}
}
내가 놓친 게 있니?
매우 논리와 지금 BalusC 감사합니다 :-) 잘 작동 :
그래서, 당신이 필요로하는 모든 바로 이것이다. – jimmybondy
반갑습니다. – BalusC
또 하나의 질문 : 여기에 설명 된 것처럼 동적 JSF 페이지를 캐시하지 않도록 브라우저에 지시 할 필요가 없다고 가정합니다. http://stackoverflow.com/questions/3642919/javax-faces-application-viewexpiredexception-view-could -not-be-restored/3642969 # 3642969, 맞죠? – jimmybondy