我想在我的Jave 7应用程序中使用OmniFaces 1.7。我的应用程序是一个包含EAR和瘦弱的战争的EAR。我的一些WAR依赖于OmniFaces,所以OmniFaces工件必须在耳朵中,而不是在WAR中的WEB-INF/lib中。
我的耳朵是这样的:
EAR
+-- lib
| +-- [some 3rd party JARs]
| `-- omnifaces.jar
+-- myEJBs.jar
`-- myWAR.war当我这样说时,OmniFaces转换器(如GenericEnumConverter)没有在JSF中注册,也无法工作。讨论了这里和这里的原因。基本上,根据JSF2.0规范 ( 11.5.1节要求扫描注释类),只扫描WAR WEB-INF/lib目录。
所以我的问题是:我应该如何在我的应用程序中包括OmniFaces
将其包括两次(在EAR/lib和WARs WEB-INF/lib中)可能会奏效,但感觉很笨拙。不久前,我尝试了RichFaces 4.3.5 (同样的问题),它没有工作,但导致了IllegalArgumentException: duplicate key: class javax.faces.convert.ByteConverter。
发布于 2014-06-06 08:27:44
OmniFaces是一个JSF实用程序库,它依赖于JSF、EL和Servlet,通常只能在WAR中使用,而不是EAR。更重要的是,EJB(一般业务服务)不应该依赖于特定的前端API,如JSF、EL和Servlet。这将使它们在其他前端(如JAX、Spring等)上不可重用。
您需要将JSF实用程序和组件库(如OmniFaces和PrimeFaces )放在WAR中,而不是在EAR中。另请参阅安装主页的OmniFaces部分:
OmniFaces被设计为一个WAR库(web片段库),因此不能在WAR自己的
/WEB-INF/lib之外的web应用的运行时类路径中放置其他地方,例如EAR的/lib,甚至服务器的/lib或JRE自己的/lib。当OmniFaces JAR文件以这种方式放错位置时,webapp将无法找到由OmniFaces捆绑的JSF/CDI注释类,并在部署或运行时抛出与此相关的异常。要解决这个问题,请将OmniFaces放回WAR的/WEB-INF/lib中。
另请参阅:
https://stackoverflow.com/questions/22046464
复制相似问题