【发布时间】:2016-02-27 18:27:36
【问题描述】:
一列中有p:dataTable和p:inputText:
<h:form id="form">
<p:dataTable id="dataTable" value="#{rowReorder.dataList}"
var="row" draggableRows="true" rowKey="#{row.id}">
<p:ajax event="rowReorder" listener="#{rowReorder.reorder}" update="dataTable"/>
<p:column>
<f:facet name="header">
<p:commandButton value="Add" actionListener="#{rowReorder.addData}"
update="dataTable" process="dataTable"/>
</f:facet>
<p:outputLabel value="#{row.id}"/>
</p:column>
<p:column>
<p:inputText value="#{row.name}"/>
</p:column>
</p:dataTable>
</h:form>
支持 bean:
import org.omnifaces.cdi.ViewScoped;
import org.primefaces.event.ReorderEvent;
import javax.inject.Named;
import java.io.Serializable;
import java.util.LinkedList;
import java.util.List;
@Named("rowReorder")
@ViewScoped
public class RowReorder implements Serializable {
private List<Data> dataList = new LinkedList<>();
public void addData() {
Data data = new Data();
data.setId(dataList.size() + 1);
data.setName("Data " + data.getId());
dataList.add(data);
}
public void reorder(ReorderEvent event) {
}
/**
* Getters, Setters
*/
public List<Data> getDataList() {
return dataList;
}
}
数据类:
public class Data implements Serializable {
private Integer id;
private String name;
/**
* Getters, Setters
*/
}
重新排序前的示例数据表:
--------------
|id | name |
--------------
| 1 | Data 1 |
| 2 | Data 2 |
| 3 | Data 3 |
| 4 | Data 4 |
--------------
并在重新排序后(将第 1 行移至第 3 行):
--------------
|id | name |
--------------
| 2 | Data 1 |
| 3 | Data 2 |
| 1 | Data 3 |
| 4 | Data 4 |
--------------
我知道这是因为在p:inputText 阶段设置了来自p:inputText 的数据。我试图通过在p:ajax 组件中指定process="@none" 来阻止处理输入字段,但它不起作用。知道如何交 draggableRows 和 p:inputText 朋友吗?
【问题讨论】:
-
调试显示
dataList的旋转发生在decode()的decode()的APPLY_REQUEST_VALUES阶段org.primefaces.component.datatable.feature.DraggableRowsFeature。并且输入的设置值稍后发生在UPDATE_MODEL_VALUES阶段,已经重新排序dataList,这是一个问题。 -
只是猜测,但尝试在 Data 中实现 equals() 和 hashCode()
-
我做到了。只是没有显示。它的默认值....
标签: jsf-2 primefaces