OmniFaces <o:tagattribute>在某些情况下不起作用

时间:2018-07-09 14:26:14

标签: omnifaces tagfile

我有一个使用OmniFaces 2.6.8的项目。在这个项目中,我有一些facelets tag files,它们使用OmniFaces的<o:tagAttribute>。对于我的一些标记文件,我注意到了奇怪的行为,这意味着<o:tagAttribute>似乎无法正常工作,我得到了

IllegalStateException: Duplicate component ID 'myForm:outer' found in view.

结果是,因为我的外部标签的id属性未被清除,因此在内部标签中被重用了(正如OmniFaces的展示中所展示的那样)。

我可以用两个非常简单的标记文件重现该问题。这是我首先使用那些标记文件的方式:

<h:form id="myForm">
  <my:outer id="outer">
    <my:inner />
  </my:outer>
</h:form>

这是标记文件的完整代码。

outer.xhtml:

<ui:composition xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
                xmlns:h="http://xmlns.jcp.org/jsf/html"
                xmlns:o="http://omnifaces.org/ui">

  <o:tagAttribute name="id" />

  <h:panelGroup id="#{id}">
    <ui:insert/>
  </h:panelGroup>

</ui:composition>

inner.xhtml:

<ui:composition xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
                xmlns:h="http://xmlns.jcp.org/jsf/html"
                xmlns:o="http://omnifaces.org/ui">

  <o:tagAttribute name="id" />

  <h:inputText id="#{id}">
    <ui:insert/>
  </h:inputText>

</ui:composition>

我注意到,只要将inner.xhtml改为使用<h:outputText>而不是<h:inputText>,就不会出现问题。当我向value添加<h:inputText>属性时,它也消失了。

这是OmniFaces中的错误,还是我做错了什么?
更新:我在OmniFaces Bugtracker中创建了issue。)

我的环境

  • OmniFaces 2.6.8
  • Mojarra 2.2.15
  • Wildfly 10.1.0.Final

1 个答案:

答案 0 :(得分:1)

这是OmniFaces 2.6.8中的bug,已在OmniFaces 2.6.9中修复(但未在变更日志中提及)。交换OmniFaces的依赖版本足以解决上述问题。

更新:请注意,还有一个related issue,应在2.7中修复(撰写本文时尚未发布2.7)。