문제

나는 사용하고 싶다 옴니페이스 내 Jave EE 7 애플리케이션의 경우 1.7입니다.내 애플리케이션은 JAR과 마른 전쟁.내 JAR 중 일부는 OmniFaces에 종속되어 있으므로 OmniFaces 아티팩트는 EAR에 있어야 하지만 EAR에는 있어야 합니다. WEB-INF/lib 전쟁에서.

내 EAR의 모습은 다음과 같습니다.

EAR
 +-- lib
 |    +-- [some 3rd party JARs]
 |    `-- omnifaces.jar
 +-- myEJBs.jar
 `-- myWAR.war

이렇게 말하면 OmniFaces 변환기(예: GenericEnumConverter)은 JSF에 등록되지 않아 작동하지 않습니다.그 이유가 논의되고 있다 여기 그리고 여기.기본적으로 JSF 2.0 사양 (부분 11.5.1 주석을 위한 클래스 스캔 요구사항), WAR만 WEB-INF/lib 디렉토리가 스캔됩니다.

그래서 내 질문은 다음과 같습니다 내 애플리케이션에 OmniFaces를 어떻게 포함해야 하나요??

두 번 포함(in EAR/lib 및 WAR WEB-INF/lib) 작동할 수도 있지만 서투른 느낌이 듭니다.나는 얼마 전에 RichFaces 4.3.5(동일한 문제)를 사용하여 시도했는데 작동하지 않았지만 다음과 같은 문제가 발생했습니다. IllegalArgumentException: duplicate key: class javax.faces.convert.ByteConverter.

도움이 되었습니까?

해결책

OmniFaces는 일반적으로 EAR이 아닌 WAR 내부에서만 사용할 수 있는 JSF, EL 및 Servlet API에 대한 종속성을 갖춘 JSF 유틸리티 라이브러리입니다.더욱이 EJB(일반적으로 비즈니스 서비스)는 JSF, EL 및 Servlet API와 같은 특정 프런트 엔드 API에 종속되어서는 안 됩니다.JAX-RS, Spring MVC 등과 같은 다른 프런트 엔드에서는 재사용할 수 없게 됩니다.

OmniFaces 및 PrimeFaces와 같은 JSF 유틸리티 및 구성 요소 라이브러리를 EAR이 아닌 WAR에 넣어야 합니다.또한보십시오 설치 OmniFaces 홈페이지 섹션:

OmniFaces는 WAR 라이브러리(웹 조각 라이브러리)로 설계되었으므로 WAR 자체 외부의 웹앱 런타임 클래스 경로에 배치할 수 없습니다. /WEB-INF/lib, EAR과 같은 /lib 또는 서버나 JRE 자체의 것 /lib.OmniFaces JAR 파일이 이러한 방식으로 잘못 배치되면 웹 애플리케이션은 OmniFaces 번들 JSF/CDI 주석이 달린 클래스를 찾을 수 없으며 배포 또는 런타임 중에 이와 관련된 예외가 발생합니다.이 문제를 해결하려면 WAR에 OmniFaces를 다시 넣으세요. /WEB-INF/lib.

또한보십시오:

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