我有一个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>
答案 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}" ...>