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

时间:2015-05-19 16:24:52

标签: ajax jsf primefaces datatable

我试图使嵌套(通过行扩展)数据表可编辑,这是另一个可编辑数据表的内部。它似乎与ajax rowEdit事件有关。当我只有一个数据表可编辑时,例如注释掉它工作的嵌套ajax标签。但是,当我尝试使用它时,它返回一个错误说:

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

这是因为双重ajax事件吗?

如何在保持两个表格可编辑的同时纠正这个问题?

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);
}

1 个答案:

答案 0 :(得分:1)

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

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

这是因为双重ajax事件吗?

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

您可以在PrimeFaces forum

的主题(2013年7月)中找到更多信息