我有一个启用了单元格编辑的数据表。该表有一个rowStyleClass,它根据行状态(INSERTED,UPDATED,DELETED或NONE)分配背景颜色。因此,当我编辑一行时,它会获得UPDATED状态,当单击删除按钮时,行获得DELETE状态,...基于该状态,行背景应正确着色(绿色表示UPDATED,红色表示DELETED,黄色表示已插入)。
我的代码:
<p:dataTable id="tblElement" var="eltItem" value="#{bean.elementList}" binding="#{bean.dtElements}" emptyMessage="No data to be displayed."
editable="true" editMode="cell" rowIndexVar="rowIndexElt" rowKey="#{eltItem.id}" resizableColumns="true" styleClass="eltStyle"
rowStyleClass="#{bean.elementRowStyle}">
<p:ajax event="cellEdit" listener="#{bean.doMarkRowAsUpdated}" update=":form1:tabView:tblElement" />
<p:column>
<p:commandButton id="btnMarkAsDeleted" icon="ui-icon ui-icon-trash" update="tblElement" action="#{bean.doBtnMarkAsDeleted}">
<p:confirm header="Confirm" message="Do you really want to delete an element?" icon="ui-icon-alert" />
</p:commandButton>
</p:column>
<p:column headerText="Key">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{eltItem.key}" />
</f:facet>
<f:facet name="input">
<p:inputText value="#{eltItem.key}" />
</f:facet>
</p:cellEditor>
</p:column>
<!-- some more columns -->
<p:dataTable>
编辑单元格时,应执行doMarkRowAsUpdated
方法......确实如此。行状态设置为UPDATED,因此已编辑的行背景应为绿色,但不是。请注意,rowStyleClass值应该是应该的,因为当表编辑模式设置为'row'时整个着色事物都可以工作。还有一件事要提......让我说我编辑了一些行。如前所述,背景颜色不会改变。但是,如果我的下一个操作是将其他行标记为已删除,则该行将显示为红色。而且这还不是全部 - 以前编辑过的行也是绿色的!就像执行'button click'方法后,更新了行样式,但在执行'cellEdit'事件方法后,行样式不会更新。
有关如何使行着色工作的任何建议吗?
我正在使用PF 5.1。
答案 0 :(得分:0)
当您将表格嵌入表单并使用remoteCommand
更新表单时,它应该有效:
<p:remoteCommand name="onCellEdit" update="@form" />
<p:dataTable ... rowStyleClass="#{bean.elementRowStyle}">
<p:ajax
event="cellEdit"
listener="#{bean.doMarkRowAsUpdated}"
oncomplete="onCellEdit()"/>