首页 > 解决方案 > 删除方法后更新 p:dataTable 的方法?

问题描述

我正在寻找运行删除方法后更新 p:dataTable 的方法。在我的情况下,用户应该首先使用参数化搜索填充 p:dataTable。表包含可以使用删除方法取消的行。这并不意味着它们被完全删除,删除方法只是更改 db 表中的某些列。例如,将 hasCancellationReference 列更改为 true。现在这意味着我需要表格仍然显示在 dataTable 行上,只是状态发生了变化。现在我正在寻找删除方法后实现数据表刷新的正确方法。

我的数据表和删除按钮:

   <h:form prependId="false" rendered="#{myController.lst ne null and myController.lst.size() gt 0}" id="dataTable">  
              <p:dataTable value="#{myController.lzy}" lazy="true" var="tra" rows="10" paginator="true" id="dtas"
                           selectionMode="single" selection="#{myController.cur}" rowKey="#{tra.transactionId}"   
                           paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {NextPageLink} {LastPageLink}"
                           paginatorPosition="top"
                           rowsPerPageTemplate="10,25,50">
                <p:ajax event="rowSelect" listener="#{myController.receipt}" update="#{parent}:tradlg" process="@this" global="false" oncomplete="PF('tradlg').show()"/>
                <p:ajax event="page" update=""/>
                <p:column headerText="Timestamp" width="30">
                  <h:outputText value="#{path.toGet.myTimeVariable}">
                    <f:convertDateTime pattern="dd.MM.yyyy HH:mm:ss" timeZone="EET"/>
                  </h:outputText>
                </p:column>
                <p:column headerText="Line" width="10">
                  <h:outputText value="#{var.lineCode}"/>
                </p:column>
                <p:column headerText="Stop" width="60">
                  <h:outputText value="#{var.stopCode} #{var.stopName}" />
                </p:column>
                <p:column headerText="Vechicle" width="30">
                  <h:outputText value="#{var.vehicleNumber}"/>
                </p:column>

                <p:column headerText="Status" width="40">
                  <h:outputText value="Deleted" style="color: red" rendered="#{var.hasCancellationReference eq true}"/>           
                  <p:commandButton  value="Delete" 
                  action="#{emvController.deleteTransaction(tra.transitAccount, tra.transactionId)}" 
                  rendered="#{tra.hasCancellationReference eq false}"/>
                </p:column>

              </p:dataTable>
            </h:form>

我尝试过的事情:

  1. 在后端代码的 delete 方法中运行 search 方法:

       public void deleteRow(int var, String varId) {
    
     try {
       MyParameterClass.getInstance().deleteRow(var, varId);
       message = MyParameterClass.getInstance().getMessage();
       if (message.equals("success 200")) {
         successMsg();
         //If delete was succesfull run searchMethod
         searchMethod();
       } else {
         errorMsg();
         System.out.println("Faces Message Controller: " + message);
       }
     } catch (Exception ex) {
       Logger.getLogger(EmvController.class).error(ex);
       return;
     }
    

    }

  2. 删除方法后在页面上进行普通刷新。这确实有效,但我怀疑会导致我计划在未来实施的新功能出现问题。

标签: jsfprimefaces

解决方案


推荐阅读