尝试编辑嵌套在可编辑数据表中的数据表(我认为 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 月起)中找到更多信息
我正在尝试制作嵌套(通过行扩展)数据 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 月起)中找到更多信息