WEB-INF 目录之外的 Facelets Taglib?

Posted

技术标签:

【中文标题】WEB-INF 目录之外的 Facelets Taglib?【英文标题】:Facelets Taglib outside WEB-INF directory? 【发布时间】:2014-06-05 11:50:57 【问题描述】:

我正在尝试创建一个 facelets taglib。到目前为止,我阅读的每个教程都告诉我将 *.taglib.xml 文件和标记文件本身放在 WEB-INF 目录中,但实际上没有人说明原因。如果我尝试将标记文件移动到另一个目录并更新*.taglib.xml 以指向移动的文件,我会得到以下TagException

/confirmation/fields/ordersearchalternatives.xhtml @33,42 <s:orderSearchAlternatives> null

javax.faces.view.facelets.TagException: /confirmation/fields/ordersearchalternatives.xhtml @33,42 <s:orderSearchAlternatives> null
  at com.sun.faces.facelets.tag.UserTagHandler.apply(UserTagHandler.java:144)
  at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)
  at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:203)

如果将*.taglib.xml 文件移动到另一个目录并且web.xml 指向该目录,也会发生同样的情况。

只有标签的 XHTML 文件和 taglib 描述符位于 WEB-INF 目录中时,它似乎才有效。我想要实现的是在其中包含 taglib 描述符以及标签的 XHTML 文件,例如resources 目录并让 web.xml 文件指向它。

这可能吗? 这完全不符合最佳实践吗?

【问题讨论】:

【参考方案1】:

也许这对其他人有帮助:偶然发现this SO post 我想出了如何在WEB-INF 目录之外托管我的标记库。 web.xml 中的 javax.faces.FACELETS_LIBRARIES 上下文参数告诉 JSF 在给定位置查找一个或多个特定的 .taglib.xml 文件。这些目录都与web 目录相关。

<context-param>
  <param-name>javax.faces.FACELETS_LIBRARIES</param-name>
  <param-value>/shared/taglibs/y.taglib.xml;/other/taglibs/x.taglib.xml</param-value>
</context-param>

【讨论】:

以上是关于WEB-INF 目录之外的 Facelets Taglib?的主要内容,如果未能解决你的问题,请参考以下文章

Web.xml分析

JSF 面对 WEB-INF 之外的配置文件?

javaweb项目结构了解

如何在Facelets模板中引用CSS / JS /图像资源?

Java web项目目录结构以及作用详解

JSF/Facelets:为啥将 JSF/Facelets 与 HTML 标签混合不是一个好主意?