【问题标题】:DataTable always removing the first lineDataTable 总是删除第一行
【发布时间】: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


【解决方案1】:

非常感谢大家的帮助和知识,但我无法使用 DataTable 的 rowKey="#{consulta.ordem}" 属性删除行,而不是我创建的以下类:

public String removerConsulta(ConsultaTemp consulta) {
    
    for (int i = 0; i < consultasTemp.size(); i++) {
        if (consultasTemp.get(i).getConsulta().equals(consulta.getConsulta())) {
            consultasTemp.remove(i);
        }
    }
    return null;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-07
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多