我有一个使用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>
这是标记文件的完整代码。
<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>
<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。)
答案 0 :(得分:1)
这是OmniFaces 2.6.8中的bug,已在OmniFaces 2.6.9中修复(但未在变更日志中提及)。交换OmniFaces的依赖版本足以解决上述问题。
更新:请注意,还有一个related issue,应在2.7中修复(撰写本文时尚未发布2.7)。