Jsf Primefaces数据表,更新行oncelledit
我有primefaces数据表,我想在单元格编辑中更新特定列或整行。编辑单元格中的值确定同一行中其他列中的值 我尝试从onCellEdit方法更新组件,但没有成功:Jsf Primefaces数据表,更新行oncelledit,jsf,primefaces,datatable,tablecelleditor,Jsf,Primefaces,Datatable,Tablecelleditor,我有primefaces数据表,我想在单元格编辑中更新特定列或整行。编辑单元格中的值确定同一行中其他列中的值 我尝试从onCellEdit方法更新组件,但没有成功: String targetTypeColumn = ((DataTable)event.getSource()).getClientId(FacesContext.getCurrentInstance()) + ":" + event.getRowIndex() + ":editor"; Req
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>
有什么想法吗
我不想更新整个数据表,因为这是浪费时间
编辑:
我试图在单元格编辑期间更新datatable
<p:dataTable id="mapperDetailsTable" styleClass="mapperDetailsTable" widgetVar="mapperDetailsTable"
..... >
<p:ajax event="cellEdit" listener="#{bean.onCellEdit}" update=":mapperDetailsForm:growlMapper mapperDetailsTable"
oncomplete="handleCellEdit(args);" />
......
......
但没有效果。下一个单元格未更新。我写的对吗?我正在编辑的单元格中使用“自动完成”,所以我没有“更新”属性
<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>
编辑2:
我选中了,列表中正确的元素上的值被更新
使用此线程的解决方案时(重新加载datatable):
一切都好。所以值更新正确,但如何仅刷新行或单元格
Edid 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()"/>
我使用p:commandButton组件解决问题 在牢房里我补充道
<p:commandButton style="display: none" value="updateTgtRow" id="updateTgtRow" process="@this" ajax="true" immediate="true" update="outputTgtType inputTgtType"/>
它看起来像黑客,但它的工作。此解决方案更新当前编辑行中的特定单元格。在
cellEdit
事件期间,update=“tableId”
的默认行为是仅更新当前行。你真的试过/调查过吗?相关:(这实际上要求另一种方式)@BalusC:你确定cellEdit
的默认值是更新当前行吗?(未尝试,不使用行和单元格编辑)列表中正确元素的值已更新。更新整个表会给我带来一些问题。当我快速编辑单元格时,我失去了对下一个编辑单元格的关注(称为刷新),并且自动完成元素会发生有线变化。刷新数据表后,在自动完成单击时调用cellEdit。它调用refresh datatable和focus lost:/I认为这应该作为Primefaces未来版本的功能请求发布
String componentId = ((DataTable) event.getSource()).getClientId(FacesContext.getCurrentInstance()) + ":"
+ event.getRowIndex() + ":updateTgtRow";
RequestContext.getCurrentInstance().execute("document.getElementById('" + componentId + "').click()");