2011-11-10 1 views
1

ViewExpiredException은 로그인 화면으로 재 지정됩니다. 문제는 예외가 여전히 기록되며 고객은 예외없이 server.log을 강력하게 갖고 싶어한다는 것입니다.JSF 1.2/Mojarra에서 예외를 삼키는 방법

이 경우에는 의문의 여지가 있지만 아직 해결해야합니다. 우리는 Mojarra를 사용하고 JBoss EAP에 배포합니다. 5.1

MyFaces approach은 분명히 Mojarra

를 사용하여 MyFacesServlet를 래핑 할 수 없습니다. JBoss JSF guide에 제공된 조언을 적용하여 Faces 서블릿을 포장하지 않았습니다. jsf-integration-deployer-jboss-beans.xml은 어디서나 찾을 수 없습니다.

approach proposed by Ed Burns을 사용할 수 없습니다. 그 이유는 JSF2를 타겟으로하고 있기 때문에 내 항아리에서 javax.faces.context.ExceptionHandlerFactory을 찾을 수 없다는 것입니다.

문제가 더 심각해지기 때문에 JSF를 처음 접해 보았습니다. 따라서 위의 접근 방법을 찾았지만 적용하지 못한 세부적인 지침에 의존해야합니다.

고맙습니다.
+1

당신이 필터의 log4j 설정 또는 특정 로거를 차단하여 처리 할 수없는 이유라도? – mrembisz

+0

@mrembisz 아니에요. JSF-y 솔루션을 위해 노력했지만, 아직 생각하지 못했습니다. 내가 가야 겠어. 감사합니다 – kostja

답변

2

감사 JSF 1.x에는 예외 처리 기능이 없습니다.

컨테이너를 보내지 말고 대신 자신을 붙잡고 리디렉션하십시오. 필터는 이것에 대한 재치있는 장소 다음 FacesServlet의 서블릿 이름에 web.xml에서

try { 
    chain.doFilter(request, response); 
} catch (ServletException e) { 
    if (e.getRootCause() instanceof ViewExpiredException) { 
     HttpServletRequest req = (HttpServletRequest) request; 
     HttpServletResponse res = (HttpServletResponse) response; 
     res.sendRedirect(req.getContextPath() + "/errors/session-expired.jsf"); 
    } else { 
     throw e; 
    } 
} 

지도이 그것을 실행 얻을.

+0

감사합니다, resonable 소리. 나는 서블릿 필터에 대한 튜토리얼을 발견하고 그것을 지금 읽고있다. 의견을 최대한 빨리 제공합니다 – kostja

+0

오히려 간단합니다. 위의 코드는'doFilter()'메서드에서 완전히 처리되어야합니다. 'init()'과'destroy()'는 비워 둘 수 있습니다. 서블릿 필터 위키에서 템플릿을 찾을 수 있습니다 : http://stackoverflow.com/tags/servlet-filters/info 필터 매핑의 유일한 차이점은 ' TheServletNameOfYourFacesServlet ' '대신. – BalusC

+0

가까운 일치이며 로그에서 스택 추적을 제거 할 수있었습니다. 하지만 여전히'SEVERE [javax.enterprise.resource.webcontainer.jsf.lifecycle] ... 단계 실행 중에 예외가 발생했습니다 : javax.faces.event.PhaseEvent'. 이것은, 예외가 슬로우되기 직전에 로그됩니다. – kostja