2014-02-10 5 views
0

FullAjaxExceptionHandler를 사용하여 아약스 요청의 시간 초과 문제를 처리하고 있습니다. 내가 직면 한 문제는 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

가에서 사용자 지정 예외 핸들러 팩토리를 추가 처리 모두 Ajax와 비 아약스 예외를 제공하기 위해 FullAjaxExceptionHandler을 포장해야 하나

<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 사양에서

  • ExceptionHandlerFactory 단일 종류의 예외가 아닌 AJAX 경우, 슬로우 다시있어, 상기 FullAjaxExceptionHandler의 원천
  • 구성 될 <error-page> 메커니즘에 의해 처리 될 것으로 기대된다.

당신은-config.xml에에게 얼굴을 확장하거나

+0

나는 작은 변화에 따라 @baluc의 답변이 있었다. 그것은 나를 위해 완벽하게 작동했습니다. 지금 나는 내가 그 대답을 찾길 원했을 때 그 대답을 찾지 못한다. 누군가 그 대답을 삭제 했습니까? –

+0

@VineethNG 그 사람이 직접 제거했을 수도 있습니다. 실제 해결책이있는 경우 직접 답변을 게시 할 수 있습니다. – kolossus