我有一个项目列表,我希望能够添加和删除项目。为此,我在a中添加整个List,每次添加或删除一个项目,我从primefaces调用update。代码如下所示:
<h:panelGroup id="group">
<ui:repeat value="#{manager.values}" var="item">
<p:inputText value="#{item.name}"/>
<p:commandButton value="Remove" action="#{manager.remove(item)}" onsuccess="update_values();"/>
</ui:repeat>
</h:panelGroup>
<p:remoteCommand update="group" name="update_values"/>
<p:commandButton value="Add" action="#{manager.newValue()}" update="group"/>
添加工作正常,但每次调用remove时,行为都很奇怪。删除最右边的项目,其他项目的名称保持不变,即使我删除了最左边的项目。
经过一些调试后,我发现这是因为value =“#{item.name}”:项目被正确删除,但删除后,为值设置了存在的字段的值以前的田地。总而言之,最正确的字段不再存在,因为ui:repeat有一个项目较少,但其他项目获得之前的值,因此只能删除最右边的字段。
有人提示如何解决这个问题?一个解决方案可能是使用javascript清除每个字段,但我更喜欢解决问题的框架而不是自己编写代码。
答案 0 :(得分:1)
尝试如下:
<p:commandButton value="Remove" action="#{manager.remove(item)}" update=":directPath:group" process="@this" />
可能原因是按钮本身没有硬更新可能是原因。
PS
你的元素周围是否有<h:form>
?