【发布时间】:2021-08-13 11:58:29
【问题描述】:
好人, 我有这个 Web 应用程序,在从 PrimeFaces Showcase 实现 DataTable 之后,我意识到通过单击删除一行它总是会删除 DataTable 中的第一行,欢迎提供一些帮助。
我的数据表代码:
<p:dataTable value="#{facturaBean.consultasTemp}" paginatorTemplate="{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" selectionMode="single" rowKey="#{consulta.ordem}" rows="5" paginator="true" widgetVar="tblConsultas" var="consulta">
<p:column style="text-align: center" headerText="Operação" width="100">
<p:commandButton style="font-size: 17px" icon="fa fa-trash-o" action="#{facturaBean.removerConsulta(consulta)}" update="@form"/>
</p:column>
<p:column headerText="Consulta/Procedimento">
<h:outputText value="#{consulta.consulta}"></h:outputText>
</p:column>
<p:column headerText="Data/Hora">
<h:outputText value="#{consulta.consultaData}"></h:outputText>
</p:column>
<p:column headerText="Médico">
<h:outputText value="#{consulta.consultaMedico}"></h:outputText>
</p:column>
<p:column headerText="Valor (MT)">
<h:outputText value="#{consulta.consultaValor}"></h:outputText>
</p:column>
<p:column headerText="Quantidade">
<h:outputText value="#{consulta.consultaQuantidade}"></h:outputText>
</p:column>
<p:column headerText="Valor Total (MT)">
<h:outputText value="#{consulta.consultaValorTotal}"></h:outputText>
</p:column>
</p:dataTable>
去除线法:
私有 ArrayList 咨询asTemp = new ArrayList();
public String removerConsulta(ConsultaTemp consulta) {
consultasTemp.remove(consulta);
return null;
}
视频了解详情: enter link description here
【问题讨论】:
-
你在
ConsultaTemp中实现了equals方法吗? -
我会尽量不将整个
ConsultaTemp实例传递给方法,但只传递密钥(我假设这将被命名为ordem)。 -
当传递key而不是item时,你是如何调整你的
removerConsulta()方法的?您检查是否传递了正确的密钥,并且您是否只删除了具有该密钥的项目? -
我多年来也没有使用 JavaEL,但如果
#{facturaBean.removerConsulta(consulta)}没有立即执行(实际上可能是这种情况,请检查),然后从客户端到后端应该会导致一个新实例被传递给removerConsulta()。如果是这种情况,那么不覆盖Object.equals()应该不会导致任何内容被删除。因此,您可能希望使用调试器单步执行您的代码,并检查该方法何时被调用以及传递了什么(特别是检查实例 ID)。
标签: java jsf primefaces