我创建了一个简单的 primefaces 4.0 表,支持行编辑和列排序。我创建了两个条目并将它们降序排序。现在,当我使用行编辑器更改一行的值时,保存该行后会被另一行的数据覆盖!当我重新加载表时,一切都正常了。
这是所有步骤:
- 用Spring ROO创建一个简单的项目(只有一个实体,三个字符串字段)
- 在 pom.xml 中将 primefaces 设置为 4.0 版本,并将源代码更改为 primefaces 4.0。
- 为表格添加了行编辑和列排序。
- 启动服务器并输入所有值“1”的第一个条目和所有值“2”的第二个条目。
- 对任何列进行降序排序(结果:“2”在顶部,“1”在底部)
- 使用 RowEditor 编辑任何值并保存。
- 现在,已编辑行的值被视图中其他行的值覆盖。
这是我的 jsf 代码:
<p:dataTable editable="true" id="list" value="#{customerBean.allCustomers}" var="customer" rendered="#{customerBean.dataVisible}" resizableColumns="false" paginator="true" paginatorTemplate=" {CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" rowsPerPageTemplate="5,10,25,50" rows="10">
<p:ajax event="rowEdit" listener="#{customerBean.onRowEdit}" update=":growlForm:growl" />
<p:columns value="#{customerBean.columns}" var="column" columnIndexVar="colIndex"
sortBy="#{customer[column]}">
<f:facet name="header">
<h:outputText value="#{applicationBean.getColumnName(column)}" />
</f:facet>
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{customer[column]}" /></f:facet>
<f:facet name="input"><p:inputText id="#{customer[column]}Input" value="#{customer[column]}" style="width:96%"/></f:facet>
</p:cellEditor>
</p:columns>
<p:column style="width:6%">
<p:rowEditor />
</p:column>
这是服务器代码:
public void onRowEdit(RowEditEvent event) {
this.setCustomer((Customer) event.getObject());
this.persist();
}
是 Roo、Primefaces、JSF 还是 JQuery 的错误???任何提示或解决方法?在不丢失当前排序和分页的情况下,在行编辑后刷新表格的最简单方法是什么?
谢谢 !!!亚历克斯