2012-02-15 3 views
12

항상 그렇듯이 약간 혼란 스럽습니다.JSF facelets 템플릿 패키징

여기 https://community.jboss.org/wiki/ModularWebAppsWithJSF2 JSF 2.0 이후 템플릿을 별도의 jar 파일로 묶는 것이 쉽고 간편하다는 것을 알게되었습니다.

유일한 문제는 다음과 같습니다. 작동하지 않습니다. 웹 애플리케이션 WEB-INF/lib에 포함 된 jar 파일에 모든 형식 (META-INF 디렉토리, resources 디렉토리, root, faces-config.xml 포함 및 제외)에 "page.xhtml"을 배포하고 무언가를 요청하기 만하면됩니다 http://host/demo/faces/page.xhtml과 같거나 템플릿에 "포함"또는 "장식"을하십시오. 나는 예외를 얻는다.

여기서 Java EE6> Packaging JSF facelets (xhtml) and ManagedBeans as JAR 내가 좋아하는 JSF 선생님이 맞춤 ResourceResolver를 사용하여 정확하게 설명합니다. 내가 리소스를 디버깅으로 디버깅 나는 의심의 여지가 작동하고 그것을 시도 줄 것이다.

이것은 역학에 관한 질문입니다. 두 가지 접근 방식의 차이점은 무엇입니까?

META-INF/resources에서 자동으로 조회되는 리소스는 무엇입니까?

답변

19

Facelets의는 ServletContext#getResource()ExternalContext#getResource() 대표에 의해 해결 (*.xhtml 그래서, 그냥 일반 페이지, 템플릿 및 파일을 포함)을 작곡. /WEB-INF/lib/*.jar!/META-INF/resources은에서 서블릿 3.0으로 변경되었으므로 Servlet 3.x 호환 컨테이너가 필요합니다. Servlet 3.x를 아직 사용하지 않거나 어떤 이유로 든 다른 위치에 JAR 파일을 저장하고 싶지 않은 경우 사용자 정의 ResourceResolver을 만들어야합니다. 도 참조 How to create a modular JSF 2.0 application? 복합체 성분 및 정적 자원가 (그래서이다 <cc:xxx> 요소 및 CSS/JS/이미지 리소스 <h:outputStylesheet>, <h:outputScript><h:graphicImage> 의해로드)의 ClassLoader#getResource()하여 클래스 경로에서 해결 Facelets의

. JSF 클래스 패스 검사에 JAR 파일을 포함 시키려면 JSF 2.x 호환 faces-config.xml 파일을 JAR 파일의 /META-INF 폴더에 포함시켜야합니다. 같은 이야기가 @ManagedBean, @FacesValidator, @FacesConverter, @FacesComponent 및 기타 JSF 아티팩트에 적용됩니다. 이클립스에서 개발할 때


, 당신은 모듈 프로젝트를 만들 웹> 웹 조각 프로젝트를 선택할 수 있습니다. 정상적인 Java 프로젝트과 크게 다르지 않지만 JavaScript 패싯과 대상 런타임을 암시 적으로 포함하고 /META-INF/web-fragment.xml 파일을 자동 작성하고 기존 동적 웹 프로젝트과 관련이있는 것으로 가정합니다. 계획.

Java 프로젝트 오른쪽 폴더 구조가 준비된 기존 표준을 사용할 수도 있습니다. /META-INF 폴더는 Java 원본 폴더에 있어야합니다. web-fragment.xml 파일은 옵션입니다. Java 프로젝트를 기본 웹 프로젝트 속성의 배치 어셈블리 섹션에 수동으로 추가하기 만하면됩니다. 이 아닌을 프로젝트의 빌드 경로 섹션에 다른 프로젝트로 추가하십시오.

(수동으로) JAR 파일을 빌드 할 때 디렉토리 항목이 JAR에 추가되었는지 확인해야합니다. 그렇지 않으면 Facelets 컴포지션을 확인할 수 없습니다. Eclipse/Ant/Maven/등의 빌드 도구를 사용하여 빌드하는 경우이를 고려해야합니다. 제어 할 수없는 경우 사용자 정의 ResourceResolver이 가장 신뢰할 수있는 방법입니다.

+2

다시 한번 감사드립니다. 도대체 당신은 항상이 모든 세부 정보를 가지고 있습니다. ResourceResolver는 간단하고 실행 가능합니다. 이제는 우리의 Maven 괴물에게 웹 조각을 먹이려고합니다. – mtraut

+0

저를 위해 일하지 않습니다 : 나는 기존의 것을 사용하고 있습니다. 표준 공유 자바 프로젝트를 구현 프로젝트의 빌드 경로에서 제거했으며 현재는 배포 어셈블리로만 추가되었습니다. 하지만 여전히 ManagedProperty는 주석 또는 faces-config에서 무시됩니다. – djmj

+0

@djmj : JAR에는 JSF 2.0 컴파일러'/ META-INF/faces-config.xml'이 있어야하며 기본 webapp의'faces-config.xml'에는'metadata-complete = "true"'가 없어야합니다. – BalusC

관련 문제