Jsf 使用时出现重复ID异常<;c:如果>;复合材料构件

Jsf 使用时出现重复ID异常<;c:如果>;复合材料构件,jsf,jstl,composite-component,Jsf,Jstl,Composite Component,当有条件地将复合组件与 我知道这个编译/渲染时间问题,但我真的不知道为什么下面的示例不起作用。 请看下面三个简单的片段 一个名为TestBean的会话范围bean,其中包含一个布尔值和两个ajax侦听器,将该值更改为true或false: @Named @SessionScoped public class TestBean implements Serializable { private boolean isVisible = false; public void onS

当有条件地将复合组件与
我知道这个编译/渲染时间问题,但我真的不知道为什么下面的示例不起作用。 请看下面三个简单的片段

一个名为TestBean的会话范围bean,其中包含一个布尔值和两个ajax侦听器,将该值更改为true或false:

@Named
@SessionScoped
public class TestBean implements Serializable {

    private boolean isVisible = false;

    public void onSetItemVisible(AjaxBehaviorEvent e) {
        this.isVisible = true;
    }

    public void onSetItemInvisible(AjaxBehaviorEvent e) {
        this.isVisible = false;
    }

    public boolean isItemVisible()  {
        return this.isVisible;
    }
}
一个名为testCmp的非常简单的复合组件:

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:cc="http://java.sun.com/jsf/composite">

    <cc:interface/>
    <cc:implementation>
        <h:outputText id="text" value="text"/>
     </cc:implementation>
</html>

以及一个查看页面,允许在隐藏/显示此复合组件之间进行切换

<h:body>
    <h:form id="testForm">

        <c:if test="#{testBean.itemVisible}">
            <test:testCmp id="test1"/>
        </c:if>
        <p/>

        <test:testCmp id="test2"/>
        <p/>

        <!-- show/hide dynamic item -->
        <h:commandLink value="Show Item">
            <f:ajax execute="@this" listener="#{testBean.onSetItemVisible}" render="@form"/> 
        </h:commandLink>
        <br/>
        <h:commandLink value="Hide Item">
            <f:ajax execute="@this" listener="#{testBean.onSetItemInvisible}" render="@form"/>
        </h:commandLink>
    </h:form>
</h:body>


问题是:在显示/隐藏之间切换时,会出现重复ID异常。 异常显示:“视图中已找到组件ID testForm:test2:文本”

它抱怨“test2”。。。未按条件添加的组件。 当我不使用复合组件并用标准组件(如
)替换它时,任何东西都可以正常工作。 为了重现错误,重要的是,在同一页上使用复合组件两次,一次使用带条件的组件,另一次不使用带条件的组件

经过进一步的搜索,我发现了另一个家伙,我想他和我有同样的问题。但他的例子看起来更复杂,更难重现。

有人知道这是怎么回事吗? 我的设置是JBoss EAP7和Mojarra JSF 2.2.14(但我也用JSF 2.3.0-m11进行了测试) 有人能证实这个问题吗?
如果是这样,我将为mojarray的家伙们创建一个bug。

这肯定是Mojarra中的一个bug,并且与在某些情况下处理动态组件树修改有关


我已经创建了一个复制者,提交了一个问题,并将我的发现写在mojarra dev邮件列表上。请在

上阅读更多内容。我在
内部使用
时遇到了同样的问题。
绕过我发现的这个bug的唯一方法是使用
而不是

谁也不能确认这个行为?如果它是当前jsf实现中的一个Bug,我可以接受它,但我在他们的jira bugtracker中没有发现任何东西,目前我不知道我是否做错了什么,或者误解了一些jsf基础知识。我在这里创建了一个Bug:它已被移动到github: