mtr*_*aut 12 packaging facelets jsf-2
一如既往,我有点困惑.
在这里https://community.jboss.org/wiki/ModularWebAppsWithJSF2我已经了解到它很容易并且开箱即用,可以在JSF 2.0之后将模板捆绑在单独的jar中.
唯一的问题是:我无法让它发挥作用.我只是在Web应用程序WEB-INF/lib中包含的jar中部署所有类型的"page.xhtml"(META-INF目录,资源目录,root;有和没有faces-config.xml)并请求一些东西像http://host/demo/faces/page.xhtml或在模板上做"包含"或"装饰".我得到一个例外.
这里Java EE6>将JSF facelets(xhtml)和ManagedBeans打包为JAR,我最喜欢的JSF老师解释了使用自定义ResourceResolver来做到这一点.当我调试资源解析我毫不怀疑这将工作,并将尝试.
这是关于力学的问题 - 这两种方法有什么区别?
究竟是在META-INF /资源中自动查找哪些资源?
Bal*_*usC 20
Facelets组合(因此,只是普通*.xhtml
页面,模板和包含文件)由ExternalContext#getResource()
代理人解决ServletContext#getResource()
.这需要一个Servlet 3.x兼容容器,因为/WEB-INF/lib/*.jar!/META-INF/resources
从Servlet 3.0开始,解析是新的.如果您还没有使用Servlet 3.x,或者由于某种原因想将这些JAR放在不同的位置,那么您需要创建一个自定义ResourceResolver
.另请参见如何创建模块化JSF 2.0应用程序?
Facelets复合组件和静态资源(因此,<cc:xxx>
要加载的组件和CSS/JS /图像资源<h:outputStylesheet>
,<h:outputScript>
和<h:graphicImage>
)将从类路径中解析出来ClassLoader#getResource()
.要将JAR文件包含在JSF的类路径扫描中,您需要在JAR文件faces-config.xml
的/META-INF
文件夹中包含JSF 2.x兼容文件.同样的故事适用于@ManagedBean
,@FacesValidator
,@FacesConverter
,@FacesComponent
和其他JSF文物.
在Eclipse中开发时,可以选择Web> Web Fragment Project来创建这样的模块项目.它与普通的Java项目没什么不同,期望它隐式包含JavaScript facet和目标运行时,自动创建/META-INF/web-fragment.xml
文件并通过将自身添加为该项目的部署程序集与现有的Dynamic Web Project相关联.
您还可以使用已准备好正确文件夹结构的现有标准Java项目.该/META-INF
文件夹必须进入Java源文件夹.该web-fragment.xml
文件是可选的方式.您只需手动将Java项目添加到主Web项目属性的Deployment Assembly部分.千万不能将其添加为项目的另一个项目构建路径部分.
当您(手动)从中构建JAR文件时,您需要确保将目录条目添加到JAR中,否则无法解析Facelets组合.如果您使用Eclipse/Ant/Maven/etc等构建工具进行构建,则还需要考虑这一点.如果这不可控,则自定义ResourceResolver
是最可靠的方法.
归档时间: |
|
查看次数: |
10676 次 |
最近记录: |