Facelets Taglib在WEB-INF目录之外?

时间:2014-04-21 11:59:20

标签: jsf jsf-2 facelets taglib jsf-2.2

我正在尝试创建一个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 个答案:

答案 0 :(得分:0)

也许这有助于其他人:绊倒this SO post我想出了如何在WEB-INF目录之外托管我的taglib。 javax.faces.FACELETS_LIBRARIES中的web.xml上下文参数告诉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>