在JSTL中的JSF组件上设置ID c:forEach会导致重复的ID异常

时间:2013-09-09 11:54:03

标签: jsf primefaces datatable jstl

我有一个primefaces treeTable并另外使用c:forEach来创建动态列。 有没有办法从另一个表单中识别c:forEach中的那些列? (如果我在c:forEach中为我的列设置了一个id,我会得到一个重复的ID错误)

<h:form id="mmvUebersicht">
<p:treeTable id="massnahmenUebersichtTable"
            value="#{mmvOrganisationseinheitenTreeHandler.root}"
            var="_tree"
            selection="#{mmvOrganisationseinheitenTreeHandler.selectedNode}"
            selectionMode="single"
            scrollable="true"
            scrollHeight="500">

            <p:ajax event="expand" listener="#{mmvOrganisationseinheitenTreeHandler.onNodeExpand}" />
            <ui:remove>
            <p:ajax event="select" update=":mmvUebersichtEastForm" listener="#{mmvOrganisationseinheitenTreeHandler.onNodeSelect}" />
            </ui:remove>

        <p:column headerText="#{labels.abteilung}" style="width:250px">
            <p:outputLabel value="#{_tree.id} #{_tree.shortNameName}"/>
        </p:column>

        <p:column headerText="#{labels.funktion}" style="width:150px">
            <p:outputLabel value="#{structureNodeHandler.getAttributeCommentByAttributeType(_tree, 'Leitung')}" />
        </p:column>
        <p:column headerText="#{labels.verantwortlich}" style="width:150px">
            <p:outputLabel value="#{mmvHelper.getUserByRacf(structureNodeHandler.getAttributeValueByAttributeType(_tree, 'Leitung'))}"/>            
        </p:column>

        <c:forEach items="#{massnahmenDefintionListHandler.defList}"
                    var="_mass"
                    >
            <p:column style="width:50px">
            <f:facet name="header">
                <p:outputLabel value="#{_mass.kurzName}" title="#{mass.name}"/>
            </f:facet>    

              <p:commandLink onclick="mmvlayout.show('east')"
                            update=":mmvContentPanelEast :mmvUebersichtEastForm" 
                            action="#{mmvHandler.fillUebersichtEastPanel(_tree,_mass)}"
                            rendered="#{massnahmenErfuellungsObjekt.abteilungHasMassnahme(_tree,_mass,true)}">
                <h:outputText value="#{massnahmenErfuellungsObjekt.bestimmeMassnahmenFaelligkeiten(_tree,_mass,true)}" 
                            styleClass="#{massnahmenErfuellungsObjekt.cellColor()} statusBar"/>
              </p:commandLink>


            </p:column>

        </c:forEach>

        <p:column style="width:*"></p:column>

</p:treeTable>

1 个答案:

答案 0 :(得分:2)

  

如果我在c:forEach中为我的列设置了一个id,则会出现重复的ID错误 \

这是因为<c:forEach>在JSF组件树中生成物理上多个JSF组件,而不是仅生成一个在生成HTML输出期间多次重复使用的组件。请参阅有关工作的详细说明JSTL in JSF2 Facelets... makes sense?

在这种情况下,您自己负责在这些JSF组件上设置唯一ID。您可以使用当前的迭代索引。

<c:forEach ... varStatus="loop">
    <p:commandLink id="link_#{loop.index}" ...>