尝试编辑嵌套在可编辑数据表中的数据表(我认为 Ajax 错误)

Attempting to edit a datatable nested inside of an editable datatable (Ajax Error I think)

我正在尝试制作嵌套(通过行扩展)数据 table editable,它位于另一个 editable 数据table 中。 ajax rowEdit 事件似乎有问题。当我只有一个 datatable 作为 editable 例如注释掉它工作的嵌套 ajax 标签。但是当我尝试同时使用它时 returns 一个错误说:

未找到方法:com.aglabexpress.Admin.Billing.CompleteInvoiceController@1146df77.editInvoiceItem(javax.faces.event.AjaxBehaviorEvent)"

这是因为双ajax事件吗?

如何在保持 tables editable 的同时纠正此问题?

HTMLX:

<h:form id="mainForm" >
<p:dataTable  id="mainFormTable" editable="true" value="#{completeInvoiceController.labNumberBill}" var="lab" paginator="true" rows="10" rowStyleClass="#{lab.colorStatus}">
<p:ajax event="rowEdit" listener="#{completeInvoiceController.editBill}"  />
<p:column>
   <p:rowToggler/>
 </p:column>
    ...
    ...
    <p:column headerText="Date" footerText="Date">
       <p:cellEditor>
         <f:facet name="output">
             <p:outputLabel value="#{lab.creationDateString}" />
         </f:facet>
         <f:facet name="input">
             <p:calendar value="#{lab.creationDate}" />
          </f:facet>
         </p:cellEditor>
   </p:column>
   ...
   ...
   <p:column headerText="Edit">
        <p:rowEditor />
   </p:column>
<p:rowExpansion>
   <p:dataTable value="#{lab.invoiceItems}" var="item" editable="true">
        <p:ajax event="rowEdit" listener="#{completeInvoiceController.editInvoiceItem}" />
           ...
           ...                 
         <p:column headerText="Description" footerText="Description">
               <p:cellEditor>
                  <f:facet name="output">
                      <p:outputLabel value="#{item.description}" />
                  </f:facet>
                   <f:facet name="input">
                      <p:inputText value="#{item.description}" />
                   </f:facet>
                 </p:cellEditor>
                </p:column>
                   ...
                   ...
                 <p:column headerText="Edit">
                     <p:rowEditor />
                  </p:column>
               </p:dataTable>
         </p:rowExpansion>

豆子

public void editInvoiceItem(RowEditEvent event){
    InvoiceItemConstructor itc = (InvoiceItemConstructor) event.getObject();
    if(cih == null){
        cih = new CompleteInvoiceHelper();
    }
    cih.updateItem(itc);
}

public void editBill(RowEditEvent event){
    CompleteInvoiceLabNumberBill bill = (CompleteInvoiceLabNumberBill) event.getObject();
    if(cih == null){
        cih = new CompleteInvoiceHelper();
    }
    cih.updateBill(bill);
}

您需要将嵌套数据表事件方法签名替换为

public void editInvoiceItem(javax.faces.event.AjaxBehaviorEvent event)

Is this because of the double ajax events?

是的。这是一个 known issue(最初是针对嵌套 p:tabView 报告的),自 PrimeFaces 5.0 以来似乎已修复。

您可以在 PrimeFaces forum

的帖子(自 2013 年 7 月起)中找到更多信息