문제

내 코드가 예외가 발생하면 때때로 매번 (매번) JSF는 빈 페이지를 제공합니다. 레이아웃을 위해 페이스 섹스를 사용하고 있습니다. 이에 비슷한 오류 가보고되었습니다 Sun forumn의 게시물, 그러나 답이 없다. 같은 문제가있는 사람이 있습니까, 아니면 해결책이 있습니까? ;)

일부 요청으로 인해. 여기에서 더 많은 Datails를 따르십시오.

web.xml

 <error-page>
        <exception-type>com.company.ApplicationResourceException</exception-type>
        <location>/error.faces</location>
 </error-page>

JSF와 관련된 스택은 실제 예외 후에 인쇄됩니다.

####<Sep 23, 2008 5:42:55 PM GMT-03:00> <Error> <HTTP> <comp141> <AdminServer> <[ACTIVE] ExecuteThread: '3' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1222202575662> <BEA-101107> <[weblogic.servlet.internal.WebAppServletContext@6d46b9 - appName: 'ControlPanelEAR', name: 'ControlPanelWeb', context-path: '/Web'] Problem occurred while serving the error page.
javax.servlet.ServletException: viewId:/error.xhtml - View /error.xhtml could not be restored.
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:249)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:226)
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:124)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175)
    at weblogic.servlet.internal.RequestDispatcherImpl.invokeServlet(RequestDispatcherImpl.java:525)
    at weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:261)
    at weblogic.servlet.internal.ForwardAction.run(ForwardAction.java:22)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
    at weblogic.security.service.SecurityManager.runAs(Unknown Source)
    at weblogic.servlet.internal.ErrorManager.handleException(ErrorManager.java:144)
    at weblogic.servlet.internal.WebAppServletContext.handleThrowableFromInvocation(WebAppServletContext.java:2201)
    at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2053)
    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1366)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:200)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:172)
javax.faces.application.ViewExpiredException: viewId:/error.xhtml - View /error.xhtml could not be restored.
    at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:180)
    at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:248)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:226)
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:124)

JSF 버전을 사용하고 있습니다 Mojarra 1.2_09, richfaces 3.2.1.GA 그리고 facelets 1.1.13.

도움이되기를 바랍니다 :(

도움이 되었습니까?

해결책

나는 이것이 주로 JSF 구현에 달려 있다고 생각합니다. 일부는 빈 화면을 렌더링 할 것이라고 들었습니다.

우리가 사용했던 것은 스택 추적으로 오류 500을 던질 것입니다. 다른 시간에 버튼은 사용자에게 오류없이 작동하지 않습니다. 이것은 우리의 개발 단계에서였습니다.

그러나 내가 줄 수있는 가장 좋은 조언은 예외를 포착하여 오류 로그에 로그인하여 나중에 디버깅을위한 스택 추적을하도록하는 것입니다. 백엔드 실패와 같이 아무것도 할 수없는 메시지의 경우 화면에 표시되는 FaceScontext에 치명적인 메시지를 추가하고 스택 추적을 기록합니다.

다른 팁

나는 내에서 비슷한 문제를 해결했다 error.jsp 오늘 페이지. 이것은 당신과 정확히 동일하지는 않지만 비슷한 문제가있는 경우 누군가가 올바른 방향으로 가리킬 수 있습니다. 내 문제는 두 가지 다른 출처에서 나오는 것 같았습니다.

먼저 message 예외 속성은 오류 페이지에서 잡힌 예외를 던지는 일부 서블릿에서 설정되지 않았습니다. 서블릿은 그것을 사용하여 예외를 잡고 재조정했습니다 ServletException(Throwable rootCause) 건설자.

둘째, 오류 페이지 자체에서 원래 저자는 스크립트 코드를 사용하여 사용을 사용하여 메시지를 구문 분석했습니다. String.split(message, ";"); 메시지가 있었기 때문에 null 이것은 실패했습니다. 나는 받고 있었다 NullPointerException 내 오류 로그에서 "오류 페이지를 제공하는 동안 문제가 발생했습니다."

이 두 가지가 결합되어 원래 예외를 던지는 서블릿의 URL에 빈 페이지를 제공했습니다. 서블릿에서 예외를 다시 입을 때 내 자신의 오류 메시지를 제공하여 문제를 해결했습니다. ServletException(String message, Throwable rootCause) 생성자이므로 오류 메시지는 더 이상 null. 나는 또한 다시 작성했다 error.jsp Scriptlet 코드 대신 EL을 사용하는 페이지이지만 엄격하게 필요하지 않았습니다.

JSF 2의 빈 페이지의 경우 중단 점을 ExceptionHandlerWrapper.handle 또는이 방법을 무시하는 클래스. 제 경우에는 너무 제한적이며 오류가 기록되지 않은 사용자 정의 코드 때문이었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top