Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring Primefaces中的复选框p:dataTable在行上混合已删除_Spring_Jsf_Primefaces - Fatal编程技术网

Spring Primefaces中的复选框p:dataTable在行上混合已删除

Spring Primefaces中的复选框p:dataTable在行上混合已删除,spring,jsf,primefaces,Spring,Jsf,Primefaces,SpringWebflow2.4.1、Spring1.1、JSF2.2.3和Primefaces 5.1 我有一个dataTable,每行有两个布尔复选框,用于修改字段。用户可以修改条目或删除整行 <h:form id="editForm"> <p:dataTable id="permissionTable" var="sdp" rowIndexVar="rowIndex" value="${serverDirectoryPermissions}">

SpringWebflow2.4.1、Spring1.1、JSF2.2.3和Primefaces 5.1

我有一个dataTable,每行有两个布尔复选框,用于修改字段。用户可以修改条目或删除整行

<h:form id="editForm">
<p:dataTable id="permissionTable" var="sdp" rowIndexVar="rowIndex" value="${serverDirectoryPermissions}">                  
<p:column>
   <f:facet name="header">
      <h:outputText value="name" />
   </f:facet>
   <div>
      <h:outputText value="${sdp.name}"/>
   </div>
</p:column>
<p:column>
   <f:facet name="header">
      <h:outputText value="upload permission" />
   </f:facet>
   <div>
      <p:selectBooleanCheckbox id="canUploadCheck" value="${sdp.hasUploadPermission}" />
   </div>
</p:column>
<p:column>
   <f:facet name="header">
      <h:outputText value="delete permission" />
   </f:facet>
   <div>
      <p:selectBooleanCheckbox id="canDeleteCheck" value="${sdp.hasDeletePermission}" />
   </div>
</p:column>
<p:column>
   <f:facet name="header">
      <h:outputText value="&nbsp;&nbsp;" />
   </f:facet>
   <div>
      <p:commandButton id="removePermission" value="${tmsg.messages.sys_button_remove}" action="${documentManager.removeServerDirectoryPermission(serverDirectoryPermissions,sdp)}" ajax="true" process=":editForm" update=":editForm" immediate="true"/>
   </div>
</p:column>
</p:dataTable>
</h:form>

单击remove按钮会触发一个操作,从原始列表中删除所选条目,然后ajax调用刷新表单(以及表)

public void removeServerDirectoryPermission(列出SDP,ServerDirectoryPermission sdpToRemove){
sdps.remove(sdpToRemove);
}
当表格刷新时,将删除正确的行。问题是,删除行下方的所有复选框都采用其正上方的行的值

e、 g

第1行正确-错误 第2行假-真 第3行正确 第4行假假

删除第2行后:

第1行正确-错误 第3行假-真 第4行正确

我调试了后端,并且第3行和第4行的bean中的值还没有更新,所以只有GUI显示了错误的值。Offc ourse如果我保存,则新值将被保存

我删除条目和更新数据表的方式是否出错

对于completenes,serverDirectoryPermissions是flowScope变量中的一个列表,当按下“保存”按钮时,它将持久保存在数据库中。保存过程工作正常,因此我省略了代码

非常感谢


>>编辑为什么要依赖行索引来删除行?选择其他方式删除条目。在Facelets中使用
#
(而不是
$
)。此条件检查,
if(sdp.getId()==sdpToRemove.getId()){…}
将需要使用
equals()
比较对象,除非两者或其中一个都具有基元类型。您好,我没有使用行索引。我使用迭代器循环列表,并找到要从列表中删除的元素的索引。该方法删除了正确的元素,表反映了这一点。只有复选框输入保持错误的值。我用equals()替换了支票,用#替换了美元,但是运气不好。谢谢anyway@malavock将u重写ServerDirectoryPermission.java的equals和hashCode。如果是,则在removeServerDirectoryPermission方法调用serverDirectoryPermissions.RemoveServerPermissions(sdp)中,将#{documentManager.removeServerDirectoryPermission(sdp)}更改为#${documentManager.removeServerDirectoryPermission(sdp)}。假设serverDirectoryPermissions已命名,并且您已将其注入DocumentManager.java中,我是否正确?我以前没有重写equals,我现在就重写了,并更新了代码,但没有成功。我知道列表中正确的条目被删除了,因为每行显示的“名称”都是正确的。我注意到现在规格部分被切断了。我使用的是SpringWebFlow,因此serverDirectoryPermissions是一个flowScope变量,而不是直接注入到文档管理器中。我有一些更新,我要编辑这篇文章。
public void removeServerDirectoryPermission(List<ServerDirectoryPermission> sdps, ServerDirectoryPermission sdpToRemove) {
   sdps.remove(sdpToRemove);

}