gpt4 book ai didi

jsf-2 - JSF facelets 模板打包

转载 作者:行者123 更新时间:2023-12-04 00:42:40 26 4
gpt4 key购买 nike

和往常一样,我有点困惑。

这里https://community.jboss.org/wiki/ModularWebAppsWithJSF2我了解到,自 JSF 2.0 以来,将模板捆绑在单独的 jar 中很容易并且开箱即用。

唯一的问题是:我无法让它工作。我只是在 Web 应用程序 WEB-INF/lib 中包含的 jar 中部署了所有风格的“page.xhtml”(META-INF 目录、资源目录、根目录;有和没有 faces-config.xml)并请求一些东西喜欢 http://host/demo/faces/page.xhtml或者在模板上做一个“包含”或“装饰”。我得到一个异常(exception)。

这里Java EE6> Packaging JSF facelets (xhtml) and ManagedBeans as JAR我最喜欢的 JSF 老师解释说要使用自定义 ResourceResolver 来做到这一点。当我调试资源解析时,我毫不怀疑这将起作用并将尝试一下。

这是关于机制的问题——这两种方法有什么区别?

在 META-INF/resources 中自动查找了哪些资源?

最佳答案

Facelets 组合 (因此,只是普通的 *.xhtml 页面、模板和包含文件)由委托(delegate)给 ExternalContext#getResource() ServletContext#getResource() 解析。这需要 Servlet 3.x 兼容的容器,因为 /WEB-INF/lib/*.jar!/META-INF/resources 解析自 Servlet 3.0 以来是新的。如果您还没有使用 Servlet 3.x,或者出于某种原因想要将这些 JAR 放在不同的位置,那么您需要创建一个自定义 ResourceResolver 。另请参阅 How to create a modular JSF 2.0 application?

Facelets 复合组件和静态资源 (因此,<cc:xxx><h:outputStylesheet><h:outputScript> 加载的 <h:graphicImage> 组件和 CSS/JS/图像资源)通过以下方式从类路径中解析 ClassLoader#getResource() 。要在 JSF 的类路径扫描中包含 JAR 文件,您需要在 JAR 文件的 faces-config.xml 文件夹中包含与 JSF 2.x 兼容的 /META-INF 文件。同样的故事适用于 @ManagedBean@FacesValidator@FacesConverter@FacesComponent 和其他 JSF 工件。

在 Eclipse 中开发时,您可以选择 Web > Web Fragment Project 来创建这样的模块项目。它与普通的 Java 项目没有太大区别,预计它将隐式包含 JavaScript 方面和目标运行时,自动创建 /META-INF/web-fragment.xml 文件并通过将自身作为部署程序集添加到该项目来与现有动态 Web 项目相关联。

您还可以使用已准备好正确文件夹结构的现有标准 Java 项目。 /META-INF 文件夹必须放在 Java 源文件夹中。 web-fragment.xml 文件是可选的。您只需手动将 Java 项目添加到主 Web 项目属性的 Deployment Assembly 部分。不要 而不是 将其添加为项目的构建路径部分中的另一个项目。

当您(手动)从中构建 JAR 文件时,您需要确保将目录条目添加到 JAR 中,否则无法解析 Facelets 组合。如果您使用 Eclipse/Ant/Maven/etc 等构建工具进行构建,则还必须考虑到这一点。如果这不可控,自定义 ResourceResolver 是最可靠的方法。

关于jsf-2 - JSF facelets 模板打包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9290482/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com