2014-09-18 4 views
1

web.xml (HTTP 500)에 구성된 오류 페이지로 리디렉션 할 때 문제가 있습니다. 다음 예외<error-page>으로 리디렉션 예외가 구성되었습니다 (HTTP 500)

java.lang.NullPointerException at java.lang.StringBuilder.<init>(StringBuilder.java:77) 
at org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.getRenderedViewId(FaceletViewDeclarationLanguage.java:1674) 
FullAjaxExceptionHandler: Well, another exception occurred during rendering error page 'comum/paginas/erro/erro500.xhtml'. Trying to render a hardcoded error page now. 

web.xml의

<error-page> 
    <exception-type>javax.faces.application.ViewExpiredException</exception-type> 
    <location>comum/paginas/erro/sessaoExpirada.xhtml</location> 
</error-page> 
<error-page> 
    <exception-type>java.lang.Throwable</exception-type> 
    <location>comum/paginas/erro/erro500.xhtml</location> 
</error-page> 
<error-page> 
    <error-code>500</error-code> 
    <location>comum/paginas/erro/erro500.xhtml</location> 
</error-page> 
<error-page> 
    <error-code>403</error-code> 
    <location>comum/paginas/erro/erro403.xhtml</location> 
</error-page> 
<error-page> 
    <error-code>404</error-code> 
    <location>comum/paginas/erro/erro404.xhtml</location> 
</error-page> 

FullAjaxExceptionHandlerFactory가면 - Config.xml의 구성된 발생되고있다.

<factory> 
    <exception-handler-factory>org.omnifaces.exceptionhandler.FullAjaxExceptionHandlerFactory</exception-handler-factory> 
</factory> 

내 Facelets의 구성 요소는 jar 파일 (/ META-INF/자원/comum/paginas/에로)에 포장되어 있습니다. ResourceResolver는

Facelets의 구성 요소가 항아리에 포장되지 않은
<context-param> 
    <param-name>javax.faces.FACELETS_RESOURCE_RESOLVER</param-name> 
    <param-value>company.FaceletsResourceResolver</param-value> 
</context-param> 

public class FaceletsResourceResolver extends ResourceResolver { 

    private ResourceResolver parent; 
    private String basePath; 

    public FaceletsResourceResolver(ResourceResolver parent) { 
     this.parent = parent; 
     this.basePath = "/META-INF/resources"; 
    } 

    @Override 
    public URL resolveUrl(String path) { 
     URL url = parent.resolveUrl(path); // Resolves from WAR. 
     if (url == null) { 
      url = getClass().getResource(basePath + path); // Resolves from JAR. 
     } 
     return url; 
    } 
} 

, 리디렉션이 제대로 작동했다. 다른 오류 페이지 (403, 404, sessionExpired)는 문제없이 작동합니다. 오류는 HTTP 500 오류에서만 발생합니다.

환경 :

  • 스피어 8.5.5.2
  • JSF 2.0 (에서 MyFaces)
  • Primefaces 5.0
  • Omnifaces 1.7
+0

해야 "음, 또 다른 예외는 'comum/paginas/에로/erro500.xhtml'오류 페이지를 렌더링하는 동안 오류가 발생했습니다." 꽤 분명해 보인다. erro500.xhtml 파일을 렌더링 할 수 없으므로 실수가있을 수 있습니다. 오타처럼 보이는데, 그 파일의 이름은 error500.xhtml 이길 기대합니다. – Gimby

+0

"erro"는 "error"에 대한 포르투갈어입니다. – BalusC

+0

@Gimby 오자가 아니며 "erro"는 포르투갈어입니다. – gfinotti

답변

1

<location> 요구 /로 시작합니다.

예.

<location>comum/paginas/erro/erro500.xhtml</location> 

<location>/comum/paginas/erro/erro500.xhtml</location>