复合组件文件夹结构

时间:2014-02-06 16:15:08

标签: jsf-2 composite-component

JSF规范2.2(2013-03-20)在第10.3.3.1项(声明用于Facelet页面的复合组件库)中说:

  

如果在XHTML页面中声明了facelet taglibrary,其名称空间以字符串开头   “http://java.sun.com/jsf/composite/”(不带引号),名称空间声明的其余部分   被视为资源库的名称[...]

     

如果“http://java.sun.com/jsf/composite/”后面的子字符串包含“/”字符,或者任何不符合库名称的字符,则必须执行以下操作。如果application.getProjectStage()是Development,则必须在页面中放置信息性错误消息并进行记录。否则,必须仅记录消息。

这意味着拥有以下文件夹结构是违法的:

resources
    components
        system
        something_specific
        something_even_more_specific

并参考图书馆名称“http://java.sun.com/jsf/composite/components/something_specific”?这是对的吗?

这似乎是一个奇怪的限制。我希望我的资料来源结构化,而不是在一个巨大的块状结合在一起。

这样的分层库实际上可以在Wildfly 8.0.0.CR1中运行,但我不确定依赖这种行为是否明智。

欢迎提供“最佳做法”的答案。

2 个答案:

答案 0 :(得分:2)

我将总结我的发现。

来源:JSF spec issue 740discussion preceding issue 740another discussionJSF spec issue 1141discussion preceding issue 1141

不允许删除库名称中的斜杠。允许在资源名称中删除。

在Mojarra 2.2.5实践中,复合组件库只适用于XHTML名称空间声明和taglib的<composite-library-name>components/system</composite-library-name>。我希望在未来的Mojarra和/或JSF规范版本中仍然可以破解。如果你使用它,那么你就是JSF spec / impl开发人员的怜悯。链接的问题和讨论表明他们愿意保留向后兼容性,即使对于非预期的功能也是如此。

在MyFaces中有一个特殊设置,org.apache.myfaces.STRICT_JSF_2_ALLOW_SLASH_LIBRARY_NAMEMyFaces issue 3454)。我希望依赖于名称中带有斜杠的资源库,使用此设置可能会破坏某些功能,例如JSF资源版本控制(如何知道哪个部分是库名称以及哪个部分属于资源名称?)。

我认为复合组件库层次结构可以通过逐个导入taglib中的组件来实现:

<tag>
    <tag-name>test</tag-name>
    <component>
      <resource-id>
          components/system/test.xhtml
      </resource-id>
    </component>
</tag>

因此库名有效地成为“组件”,资源名称变为“system / test.xhtml”。

答案 1 :(得分:0)

经过一些实验,我认为应该阅读这些陈述:

  • 将名称空间声明的其余部分视为资源库的名称 http://java.sun.com/jsf/composite/components/system必须与/resources/components/system

  • 相匹配
  • 任何不符合图书馆名称的字符

    如果您声明http://java.sun.com/jsf/composite/components/system2/resources/components/system2不存在,请采取措施

    Warning: This page calls for XML namespace http://java.sun.com/jsf/composite/components/system2 declared with prefix y but no taglibrary exists for that namespace.

因此宣布

是绝对合法的
xmlns:x="http://java.sun.com/jsf/composite/components/system"

和/ resources

下存在的任何其他文件夹结构