删除表单中的重复实体并使用更新可视化结果不起作用

时间:2013-10-23 13:02:03

标签: jsf primefaces

我有一个项目列表,我希望能够添加和删除项目。为此,我在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清除每个字段,但我更喜欢解决问题的框架而不是自己编写代码。

1 个答案:

答案 0 :(得分:1)

尝试如下:

<p:commandButton value="Remove" action="#{manager.remove(item)}" update=":directPath:group" process="@this" />

可能原因是按钮本身没有硬更新可能是原因。

PS

你的元素周围是否有<h:form>