【发布时间】:2015-01-27 22:08:45
【问题描述】:
我有点卡在 PrimeFaces dataTable 部分。我使用 rowEditor 和 sortBy 内置方法创建了一个表,但是当我修改表中的一行时,条目的顺序不会更新。
理论上,它应该可以工作:update=":form:fruits"。但它不会更新修改后的行。所以我尝试更新整个表单:update=":form"。但在这种情况下,我会丢失表中的所有数据,除了更新的数据,没有任何设计。
ScreenShot01
ScreenShot02
这是重现问题的非常简短的示例代码。
Fruit.java:
public class Fruit {
private Integer id;
private String name;
public Fruit(Integer id, String name) {
super();
this.id = id;
this.name = name;
}
@Override
public boolean equals(Object o) {
if (!(o instanceof Fruit)) {
return false;
}
return id == ((Fruit) o).getId();
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Fruits.java:
@ManagedBean(name = "fruits")
@ViewScoped
public class Fruits implements Serializable {
private static final long serialVersionUID = 1L;
private ArrayList<Fruit> list = new ArrayList<Fruit>() {
{
add(new Fruit(1, "apple"));
add(new Fruit(2, "orange"));
add(new Fruit(3, "banana"));
add(new Fruit(4, "pineapple"));
add(new Fruit(5, "cocoa"));
}
};
public void onRowEdit(RowEditEvent event) {
Fruit fruit = (Fruit) event.getObject();
list.set(list.indexOf(fruit), fruit);
}
public ArrayList<Fruit> getList() {
return list;
}
public void setList(ArrayList<Fruit> list) {
this.list = list;
}
}
fruits.xhtml:
<h:head />
<h:body>
<h:form id="form">
<p:dataTable id="fruits" value="#{fruits.list}" var="fruit"
editable="true" sortBy="#{fruit.name}">
<p:ajax event="rowEdit" listener="#{fruits.onRowEdit}" update=":form"></p:ajax>
<p:column headerText="Name" sortBy="#{fruit.name}">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{fruit.name}" />
</f:facet>
<f:facet name="input">
<h:inputText value="#{fruit.name}" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column>
<p:rowEditor />
</p:column>
</p:dataTable>
</h:form>
</h:body>
</html>
有什么办法可以解决这个问题吗?
【问题讨论】:
-
我也遇到了同样的问题,有人找到解决办法了吗?
标签: sorting primefaces datatable