这没用; 至少,不像人们所期望的那样。简而言之:ADF 确实支持 JSF2 和 Facelets,它们在单个应用程序中很好地共存。只要你不把它们混在一起。
我打算将 ADF 用作组件库,其方式类似于使用 PrimeFaces 或 RichFaces 的方式:添加正确的依赖项,配置需要配置的内容,然后一切顺利。当 Oracle 说 ADF 支持 JSF2 和 Facelets 时,人们会假设这种情况。
首先,您不能在<af:document />
标签(或特立尼达的对应物)之外使用 ADF 组件;这意味着此标记之外的内容将被忽略,从而将使用 Facelets 的能力降至最低。因此,在 ADF 组件所在的同一页面上几乎不会有任何 Facelets 代码。
JSF + CDI 集成只能通过 Mojarra 实现获得。使用 MyFaces(当前 ADF 版本的基础),可以通过更新 MyFaces jar 和添加 CODI 使其工作,但它不能开箱即用,我没有花时间进一步研究它。
除此之外,对于布局管理,您还坚持使用 ADF 方式(通过 pageTemplateDef 和 pageTemplate 标签),因为由于对文档标签的依赖,很难在 Facelets 中混合。所以你看,Facelets 支持在那里,“标准”JSF2 页面可以存在于 ADF 应用程序中——但是要使用 ADF 的组件,你需要在 ADF 页面中。
对于任何可能感兴趣的人,一旦您使用 JDeveloper 填充本地 maven 存储库(根据原始问题中评论中建议的技术),在可以运行的 Web 应用程序(war)中具有 ADF UI 组件的最小依赖项在 WebLogic 12c 或带有 ADF 基本功能的 Glassfish 上,如下所示:
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.oracle.adf</groupId>
<artifactId>trinidad-api</artifactId>
<version>12.1.2-0-0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.oracle.adf</groupId>
<artifactId>trinidad-impl</artifactId>
<version>12.1.2-0-0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.oracle.adf</groupId>
<artifactId>adf-richclient-api-11</artifactId>
<version>12.1.2.0.40.66.34</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.oracle.adf</groupId>
<artifactId>adf-richclient-impl-11</artifactId>
<version>12.1.2.0.40.66.34</version>
<scope>provided</scope>
</dependency>
您还需要添加其他几个配置文件:
WEB-INF/adfc-config.xml
META-INF/adf-config.xml
META-INF/connections.xml
META-INF/wsm-assembly.xml
faces-config.xml
以及web.xml
文件上的进一步 ADF 样板配置。
所以,到目前为止的答案是:
是否可以(将 ADF 用作组件库)?是的。
有什么限制吗?没有 CDI(开箱即用)和有限的 Facelets 支持。JSF2 ajax 功能不能在 ADF 文档中使用 - 您必须使用 ADF 部分页面呈现,但是 JSF2 自定义组件和您可以编写的任何 ClientBehavior 都可以正常工作。
值得麻烦吗?不。