我已经阅读了有关如何在 Web 应用程序中创建复合组件和自定义标签的各种博客文章和 stackoverflow 文章,并且已经让事情正常工作。我现在正试图将所有内容移到可重用的 JAR 文件中。
mylib.jar 层次结构:
src/main/java
com.example.MyComposite.java
src/main/resources/
META-INF
faces-config.xml
my.taglib.xml
META-INF/resources/components
myComposite.xhtml
META-INF/tags
myTag.xhtml
我的.taglib.xml:
<facelet-taglib version="2.2"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facelettaglibrary_2_2.xsd">
<namespace>http://www.example.com/components</namespace>
<tag>
<tag-name>myTag</tag-name>
<source>
tags/myTag.xhtml
</source>
</tag>
<tag>
<tag-name>myComposite</tag-name>
<component>
<resource-id>
components/myComposite.xhtml
</resource-id>
</component>
</tag>
</facelet-taglib>
我已经将它构建为一个 jar 并在我的网络应用程序中使用它,并且自定义标签和复合组件都工作得很好。尽管如此,我还是尝试了 100 种不同的层次结构组合才能让它发挥作用。
我的问题是我不喜欢我似乎必须将自定义标签放在一个地方(/tags)和另一个地方(/resources/components)的复合组件。此外,我必须使用源标签引用自定义标签,并使用组件/资源 ID标签引用复合组件。例如,我尝试将 myTag.xhtml 放入 /resources/components 并使用资源 ID 引用它,但是当我尝试使用它时却得到了 NPE。
那么标签和组件是否必须位于不同的目录中?我只需要忍受这种等级制度吗?