如何正确使用OmniFaces在一个耳朵
-
21-12-2019 - |
题
我想要使用 OmniFaces 1.7在我的灵真的太好了EE7应用程序。我应用程序是一个耳包含罐和一个 瘦瘦的战争.一些我的罐子里有一个依赖OmniFaces,因此OmniFaces神器必须在耳朵,但是不在 WEB-INF/lib
在战争。
这里是我的耳朵看起来像:
EAR
+-- lib
| +-- [some 3rd party JARs]
| `-- omnifaces.jar
+-- myEJBs.jar
`-- myWAR.war
当我把它放这种方式,OmniFaces转换器(喜欢 GenericEnumConverter
)是未注册的JSF的,不会的工作。为此原因是讨论的 在这里, 和 在这里,.基本上根据 JSF2.0规范 (部分 11.5.1要求进行扫描的课程的注释),只有战争 WEB-INF/lib
目录进行扫描。
所以我的问题是: 如何我应该包括OmniFaces在我的申请?
其中包括两次(在 EAR/lib
和战争 WEB-INF/lib
)可能的工作,但感觉很笨拙。我试了前一段时间与RichFaces4.3.5(相同的问题)而没有工作,但导致 IllegalArgumentException: duplicate key: class javax.faces.convert.ByteConverter
.
解决方案
OmniFaces是一个JSF实用的图书馆与依赖于JSF、萨和Servlet Api,它们通常仅适用内部的战争,不是一个耳朵。甚至更多,你的前总(商业服务)不应该有任何依赖于特定的前端Api如JSF、萨和Servlet Api。这将使他们unreusable于其他前端,例如贾克斯-RS,弹簧视,等等。
你需要把JSF工具和部件库,如OmniFaces和PrimeFaces在战争中,不在耳朵上。也参看 安装 部分OmniFaces主页:
OmniFaces的目的是作为一种战争图书馆(网碎片库),因此不能被放置在其他地方的网络应用程序的运行类路径以外的战争的自己
/WEB-INF/lib
, 如耳朵/lib
或甚至服务器或java运行环境的自己/lib
.当OmniFaces罐子文件是错误的这种方式,那么该网络应用程序,将无法找到OmniFaces-捆绑JSF/CDI附加说明的类扔例外有关的这一期间部署或运行时间。为了解决它,放回OmniFaces在战争的/WEB-INF/lib
.