我有primefaces数据表,我想更新单元格编辑上的特定列或整行 . 已编辑单元格中的值确定同一行中其他列中的值 .
我试图从onCellEdit方法更新组件但没有成功:
String targetTypeColumn = ((DataTable)event.getSource()).getClientId(FacesContext.getCurrentInstance()) +
":" + event.getRowIndex() + ":editor";
RequestContext.getCurrentInstance().update(targetTypeColumn);
列有单元格编辑器:
<p:column id="tgtType" styleClass="mapDetsTblColTypeTgt" headerText="Target Type">
<p:cellEditor id="editor" rendered="...">
<f:facet name="output">
<h:outputText value="..." />
</f:facet>
<f:facet name="input">
<p:inputText value="..." styleClass="mapDetsTblInput" onselect="this.value=this.value" />
</f:facet>
</p:cellEditor>
<h:outputText value="..." rendered="!..."/>
</p:column>
有任何想法吗?
我不想更新整个数据表,因为这是浪费时间 .
编辑:
我试图在单元格编辑期间更新数据表
<p:dataTable id="mapperDetailsTable" styleClass="mapperDetailsTable" widgetVar="mapperDetailsTable"
..... >
<p:ajax event="cellEdit" listener="#{bean.onCellEdit}" update=":mapperDetailsForm:growlMapper mapperDetailsTable"
oncomplete="handleCellEdit(args);" />
......
但没有效果 . 下一个单元格未更新 . 我写的是正确的吗?我在编辑的单元格中使用autoComplete,所以我没有更新属性 .
<p:cellEditor rendered="#{guiUtils.isEditable(mapperCtrl, fieldMapping)}">
<f:facet name="output">
<h:outputText value="#{fieldMapping.fieldNameTgt}"/>
</f:facet>
<f:facet name="input">
<p:autoComplete value="#{fieldMapping.fieldNameTgt}" completeMethod="#{mapperCtrl.dmUtils.completeTargetFields}" >
<p:ajax event="itemSelect" listener="#{mapperCtrl.action}" process="mapperDetailsTable"/>
<p:ajax event="change" listener="#{mapperCtrl.action}" process="mapperDetailsTable"/>
</p:autoComplete>
</f:facet>
</p:cellEditor>
EDIT2:
我检查并更新了列表中正确元素的值 .
当我使用此线程的解决方案(重新加载数据表)时:Updating entire <p:dataTable> on complete of <p:ajax event="cellEdit">一切正常 . 因此值正确更新但如何仅刷新行或单元格?
爱德3:
我发现我可以使用commandButton更新单元格
<p:column>
.....
<p:commandButton value="updateTgtRow" id="updateTgtRow" process="@this" ajax="true" immediate="true" update="outputType inputType"/>
</p:column>
单击后按钮单元格更新,无需重新加载表 . 但是如何在单元格编辑后调用单击该按钮?当我添加oncomplete时,单元格编辑不起作用 . 单元格是只读的 . 任何的想法?
<p:ajax event="cellEdit" listener="#{mapperCtrl.onCellEdit}"
process="@this" oncomplete="#(updateTgtRow).click()"/>
1 回答
我使用p:commandButton组件解决了我的问题
在我添加的单元格中
它更新来自其他单元格的字段(outputTgtType和inputTgtType) . 在bean中我打电话点击那个按钮
它看起来像黑客,但它的工作原理 . 此解决方案更新当前编辑行中的特定单元格 .