首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSF facelets模板打包

JSF facelets模板打包
EN

Stack Overflow用户
提问于 2012-02-15 17:07:35
回答 1查看 11.5K关注 0票数 12

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

在这里,https://community.jboss.org/wiki/ModularWebAppsWithJSF2,我了解到,从JSF2.0开始,将模板捆绑到单独的jars中是很容易的,而且是开箱即用的。

唯一的问题是:我不能让它工作。我只需在web应用程序WEB-INF/lib包含的jar中部署所有类型的"page.xhtml“(META-INF目录、资源目录、根目录;使用和不使用faces-config.xml),并请求类似http://host/demo/faces/page.xhtml的内容,或者在模板上执行"include”或"decorate“。我得到了一个例外。

在这里,我最喜欢的Java EE6> Packaging JSF facelets (xhtml) and ManagedBeans as JAR老师解释了如何使用定制的ResourceResolver来实现这一点。当我调试资源解析时,我毫不怀疑这将会工作,并会试一试。

这是关于机制的问题-两种方法之间的区别是什么?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-28 06:38:06

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

Facelets复合组件和静态资源(由<h:outputStylesheet><h:outputScript><h:graphicImage>加载的so、<cc:xxx>组件和CSS/JS/image资源)由ClassLoader#getResource()从类路径中解析出来。要在JSF的类路径扫描中包含JAR文件,需要在JAR文件的/META-INF文件夹中包含一个与JSF2.x兼容的faces-config.xml文件。同样的情况也适用于@ManagedBean@FacesValidator@FacesConverter@FacesComponent和其他JSF工件。

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

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

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

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9290482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档