我使用JSF 2.2,Primefaces 3.5,使用JSTL 1.1标签,以下是代码示例:
<c:forEach items="${backingBean.myObjects}" var="Object" varStatus="objIndex">
<p:panel id="bo_#{objIndex.index}">
<p:panelGrid columns="2">
<h:outputText value="#{Object.className}" />
<p:commandButton value="Add Field" actionListener="#{backingBean.addField(objIndex.index)}" update="bo_#{objIndex.index}"/>
</p:panelGrid>
<p:panelGrid columns="2">
<c:forEach items="${Object.fields}" var="field" varStatus="fIndex">
<h:inputText id="fName_#{objIndex.index}_#{fIndex.index}" value="#{field.name}">
<h:inputText id="fVal_#{objIndex.index}_#{fIndex.index}" value="#{field.value}">
<p:commandButton value="X" actionListener="#{backingBean.deleteObjectField(objIndex.index, fIndex.index)}" update="bo_#{objIndex.index}"/>
</c:forEach>
</p:panelGrid>
</p:panel>
</c:forEach>
此代码用于显示包含动态字段列表的动态对象列表,用户可以添加字段或删除字段。
问题在于,当用户删除bo_#{objIndex.index}
面板内的字段时,我只更新此面板,但下面的所有面板都有重复的字段ID(此ID在以上代码如下fName_#{objIndex.index}_#{fIndex.index}
所以它应该是唯一的,
对于前。在fName_1_0
的面板中删除字段fname_1_1
之后,不会在身份fname_1_2
,ID bo_1
,panel bo_0
中包含三个字段,而是fName_1_0
生成的HTML代码中的1}},fname_1_0
,fname_1_1
)会导致一些问题。