一如既往,我有点困惑。
Here https://community.jboss.org/wiki/ModularWebAppsWithJSF2 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 http://host/demo/faces/page.xhtml或者在模板上进行“包含”或“装饰”。我有一个例外。
Here Java EE6> 将 JSF Facelets (xhtml) 和 ManagedBeans 打包为 JAR https://stackoverflow.com/questions/6104498/jee6-packaging-jsf-facelets-xhtml-and-managedbeans-as-jar我最喜欢的 JSF 老师解释说要使用自定义 ResourceResolver 来完成此任务。当我调试资源解析时,我毫不怀疑这会起作用并且会尝试一下。
这是关于机制的问题——两种方法有什么区别?
自动在 META-INF/resources 中查找哪些资源?
Facelets 组合物(所以,简单地说*.xhtml
页面、模板和包含文件)通过以下方式解析ExternalContext#getResource() http://docs.oracle.com/javaee/6/api/javax/faces/context/ExternalContext.html#getResource%28java.lang.String%29其委托给ServletContext#getResource() http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContext.html#getResource%28java.lang.String%29。这需要 Servlet 3.x 兼容的容器,因为/WEB-INF/lib/*.jar!/META-INF/resources
解析 from 是 Servlet 3.0 以来的新内容。如果您还没有使用 Servlet 3.x,或者出于某种原因想要将这些 JAR 放在不同的位置,那么您需要创建一个自定义的ResourceResolver http://docs.oracle.com/javaee/6/api/javax/faces/view/facelets/ResourceResolver.html。也可以看看如何创建模块化 JSF 2.0 应用程序? https://stackoverflow.com/questions/6199458/how-to-create-a-modular-jsf-2-0-application/6201044#6201044
Facelets 复合组件和静态资源 (so, <cc:xxx>
要加载的组件和CSS/JS/图像资源<h:outputStylesheet>
, <h:outputScript>
and <h:graphicImage>
) 通过以下方式从类路径解析ClassLoader#getResource() http://docs.oracle.com/javase/6/docs/api/java/lang/ClassLoader.html#getResource%28java.lang.String%29。要将 JAR 文件包含在 JSF 的类路径扫描中,您需要包含 JSF 2.x 兼容的faces-config.xml
文件在/META-INF
JAR 文件的文件夹。同样的故事也适用于@ManagedBean
, @FacesValidator
, @FacesConverter
, @FacesComponent
以及其他 JSF 工件。
在Eclipse中开发时,可以选择网页 > 网页片段项目创建这样一个模块项目。和正常的没有太大区别Java项目,期望它将隐式包含 JavaScript 方面和目标运行时,自动创建/META-INF/web-fragment.xml
文件并与现有的关联动态网页项目通过将其自身作为部署程序集添加到该项目中。
您还可以使用现有标准Java项目准备好正确的文件夹结构。这/META-INF
文件夹必须位于 Java 源文件夹中。这web-fragment.xml
顺便说一下,文件是可选的。您只需手动将 Java 项目添加到部署组装主 Web 项目属性的部分。做not将其添加为项目中的另一个项目构建路径部分。
当您(手动)从中构建 JAR 文件时,需要确保将目录条目添加到 JAR 中,否则无法解析 Facelets 组合。如果您使用 Eclipse/Ant/Maven/等构建工具进行构建,则还必须考虑到这一点。如果这是不可控的,可以定制ResourceResolver
是最可靠的方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)