2009-09-02 3 views
6

여러 개의 얼굴 구성 파일을 만들 때 faces-config.xml을 WEB-INF 밖에 두는 것이 맞습니까? JSF 스펙은 이에 대해 매우 명확하지 않습니다 (섹션 10.1.3)JSF는 WEB-INF 외부의 구성 파일에 직면합니까?

그렇다면이 faces-config.xml을 web.xml에서 어떻게 선언해야합니까? 뭔가로 PARAM 값을 선언하는 올 - 내 얼굴-config.xml에 외부 WEB-INF 인 경우

<context-param> 
    <param-name>javax.faces.CONFIG_FILES</param-name> 
    <param-value>/WEB-INF/faces-config1.xml</param-value> 
</context-param> 

이제 : IDE의 (이클립스/jdev를 같이) 일반적으로 같은 것을 사용에 의해 생성 된 경로 "/WebContent/WEB-INF/faces-config2.xml"을 좋아합니까?

답변

7

가능하지만 권장하지는 않습니다. 구성 파일을 WEB-INF 아래에 두는 이유는 서버가 이러한 파일을 제공하지 않는다는 것입니다. 코드, 데이터베이스 구성 및 기타 민감한 정보가 있어야합니다.

"/WebContent/WEB-INF/faces-config2.xml"을 사용할 수 없습니다. - AFAIK "WebContent"는 Eclipse마다 다릅니다. 구성 파일 이름을 WAR 내부에서 절대적으로 유지하십시오. 이는 항상 "/ WEB-INF /"로 시작한다는 것을 의미합니다.

0

web.xml에서 참조하는 경우 파일은 런타임에 전쟁에 있어야합니다. 컨테이너가 faces-config.xml 자원을 찾을 수있는 다른 방법이 있습니다. 응용 프로그램 시작시

10.4.2

, 모든 요청을 처리하기 전에, 다음 알고리즘에 따라있는 JSF 구현해야 과정 0 개 이상의 응용 프로그램 구성 자원 :

  • 검색 이 웹 응용 프로그램의 ServletContext 자원 경로에 "META-INF/faces-config.xml"이라는 이름의 모든 자원을 추가하고 각각을 JSF 구성 자원으로로드하십시오 (에 의해 반환되는 순서의 역순으로로드).현재 스레드의 ContextClassLoader에서 getResources().

  • javax.faces.CONFIG_FILES라는 컨텍스트 초기화 매개 변수가 있는지 확인하십시오. 존재하는 경우 컨텍스트 상대 리소스 경로 ("/"로 시작)의 쉼표로 구분 된 목록으로 처리하고 지정된 각 리소스를로드합니다.

  • "/ WEBINF/ faces-config.xml"이라는 웹 응용 프로그램 구성 자원이 있는지 확인하고 해당 자원이 있으면로드하십시오.

1

David의 대답에서 언급했듯이 설정 파일을 WEB-INF 디렉토리 외부에 두는 것은 좋지 않습니다. 그러나 프로젝트를 구성하는 방법을 찾고 있다면 이라는 하위 디렉토리를 WEB-INF 아래에 만들어보십시오.

예를 들어, faces-config 파일을 많이 다루는 경우, /WEB-INF/config 디렉토리를 만들고 faces-config 파일을 거기에 넣을 것입니다.