2015-05-19 30 views
1

我正在嘗試在另一個可編輯數據表中編制一個嵌套的(通過行擴展)數據表。它似乎有問題的ajax rowEdit事件。當我只有一個數據表可編輯時,例如註釋掉它工作的嵌套ajax標籤。但是,當我嘗試同時使用它返回一個錯誤說:找不到試圖編輯嵌套在可編輯數據表裏面的數據表(我認爲是Ajax錯誤)

方法:[email protected]7.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); 
} 
+2

嘗試PrimeFaces 7,PrimeFaces在一個線程的詳細信息0.2不支持了 – Kukeltje

+0

我會更新primefaces,但我之前的開發做了調整,以舊primefaces源代碼允許的東西,但我不知道是什麼。所以我害怕我堅持這個版本,直到我有信心找出它是什麼。 – user2446136

+1

好的,你沒有得到提示....指定你使用的版本,並嘗試更新的版本,只是爲了看看它是否仍然失敗。並創建一個mcve,如果有人想重現,他們的代碼和你完全一樣。請同時閱讀[ask] – Kukeltje

回答

1

您需要更換您的嵌套的數據表事件方法簽名

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

這是因爲雙AJAX事件?

是。這是一個known issue(最初報告嵌套p:tabView),這似乎是自PrimeFaces 5.0以來修復。

你可以找到(從2013年7月)PrimeFaces forum

+1

這有效,但我還必須設置並通過event.getComponent()。getAttributes()獲得(「發票」) – user2446136