2010-06-08 6 views
1

Java EE 6 응용 프로그램 서버 (GlassFish v3)에서 Facelets와 함께 JSF 2.0을 사용하고 있습니다.JSF 2 : 오류 페이지 용으로 렌더링되지 않은 Facelets 컴포지션 (템플릿)

<error-page> 
    <exception-type>java.lang.Throwable</exception-type> 
    <location>/error-all.xhtml</location> 
</error-page> 

이것은 /error-all.xhtml 테스트 페이지는 다음과 같습니다 : 나는 web.xml 파일에 예외에 대한 오류 페이지를 구성 I가 클릭하면

<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
       xmlns:ui="http://java.sun.com/jsf/facelets" 
       xmlns:f="http://java.sun.com/jsf/core" 
       xmlns:h="http://java.sun.com/jsf/html" 
       template="/resources/templates/decorator.xhtml"> 

    <ui:define name="title">Title</ui:define> 

    <ui:define name="body"> 
     <h1>Body</h1> 
    </ui:define> 
</ui:composition> 

나는 목적에의 RuntimeException를 throw 관리 빈을 구현 내 명령 링크 중 하나. 이 경우 /error-all.xhtml 페이지의 내용이 표시되지만 Facelets로 프로세스를 가져 오지 않으므로 template = "/ resources/templates/decorator.xhtml"이 적용되지 않습니다.

Google 크롬을 사용하면 레이아웃이없는 "제목"과 "본문"만 표시됩니다. Chrome에 요소 검사를 요청하면 ui : compositionui : define 태그가 포함 된 전체 소스 코드가 생성됩니다. Chrome은 분명히 이해하지 못합니다. 이것은 Facelets 페이지가 처리되지 않는다는 나의 이론을 확인합니다.

내 질문은 어떻게 해결할 수 있습니까? 오류 페이지가 처리되도록하고 오류 페이지의 내용과 템플릿의 조합 결과 인 HTML 코드를 반환하려면 어떻게해야합니까?

답변

5

즉, 오류 페이지의 요청은 FacesServlet을 통해 전달되지 않았습니까? 이 작업을 수행하려면 location을 업데이트해야합니다.

예. FacesServleturl-pattern*.jsf 경우, 당신은 대신 "일반 XHTML"/error-all.xhtml/error-all.jsf가되기 위해 location를 업데이트해야합니다.

+0

감사합니다. 나는 그것을 시도했으나 이제는 HTTP Status 500 오류 페이지 (표준 GlassFish 오류 페이지)와 서버 로그에서 예외를 제공합니다. 경고 : [email protected] : 예외 처리 오류 페이지 [exceptionType = java .lang.Throwable, location =/error-all.faces] javax.servlet.ServletException : 범위 형식 javax.enterprise.context.RequestScoped에 대한 활성 컨텍스트가 없습니다. 또한 NetBeans web.xml 편집기를 사용하는 경우 내 프로젝트에서 파일을 선택해야하며 파일의 정확한 이름을 사용합니다. 수동으로 .faces로 변경해야했습니다. –

+0

GlassFish 버그 일 수 있습니다 : https://glassfish.dev.java.net/issues/show_bug.cgi?id=11544 –

+0

실제로 그랬습니다. GlassFish 3.0.1을 설치했는데 성공했습니다. 감사! –

-2
<servlet-mapping> 
     <servlet-name>Faces Servlet</servlet-name> 
     <url-pattern>/faces/*</url-pattern> 
    </servlet-mapping> 


<error-page> 
     <error-code>500</error-code> 
     <location>/faces/error.xhtml</location> 
</error-page> 

이렇게하면 정상적으로 작동합니다. error.xhtml 대신 오류 페이지의 위치에 대한 얼굴 서블릿의 URL 패턴을 넣으십시오. /faces/error.xhtml

+0

이미 주어진 답변과 다른 점은 무엇입니까? – BalusC

+0

@BalusC에 동의합니다. –

관련 문제