【发布时间】:2018-12-17 06:36:36
【问题描述】:
我有一个使用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-attribute 添加到<h:inputText> 时,它也会消失。
这是 OmniFaces 中的错误,还是我做错了什么?
(更新:我在 OmniFaces bugtracker 中创建了一个issue。)
我的环境
- OmniFaces 2.6.8
- Mojarra 2.2.15
- Wildfly 10.1.0.Final
【问题讨论】: