primefaces数据表中的可拖动行 – 一种保存表顺序的方法?

我试图在primefaces中的数据表上实现可拖动的行。 我知道Primefaces在一个数据表中有可拖动的行“计划在将来发布”。 我目前正试图找到一些方法来自己实现这个function。

我使用下面的jquery代码来使行可拖动

$(".ui-datatable.sortable tbody").sortable(); 

但是,一旦离开页面,这不会保存行的顺序。 我有一个按钮来保存表,我试图看看我是否可以编写一个保存行的顺序的函数。

类似于上一篇文章中实现的内容: http : //forum.primefaces.org/viewtopic.php?f = 3&t = 2678 。 但是每次交换行时都不会这样做,我想在按下下面的“保存”按钮时保存一次表。 这有可能实现吗?

谢谢。

我真的不明白为什么你决定发布问题,如果你已经有答案的提示。 但由于没有人决定接受这个问题的答案,我会这样做。

基本上,您所要做的就是将重新排序的列表索引的计算绑定到命令按钮的onclick事件,并在操作方法中获取新订单以处理重新排序的列表。 我使用托管bean的专用字段来保持订单,但绝对没有必要。 以下设置。

观点

                      

javascriptpf.js ):

 $(document).ready(function() { $(tabSort.jqId + '.ui-datatable tbody').sortable(); $(tabSort.jqId + '.ui-datatable tbody').disableSelection(); }); function doOrder() { var order = ''; var len = $('.row').length; $('.row').each(function(index) { order += ($(this).text() + ((index == (len - 1)) ? '' : ';')); }); $('#form\\:order').val(order); return true; } 

托管bean

 @ManagedBean @RequestScoped public class SortableDatatableBean { private String order = "0;1";//getter+setter private List list;//getter+setter public SortableDatatableBean() { list = new ArrayList(); Data d; d = new Data("name", "value"); list.add(d); d = new Data("name1", "value1"); list.add(d); } public String action() { //String order = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("form:order"); List reordered = new ArrayList(); for(String s : order.split(";")) { try { Integer i = Integer.parseInt(s); Data data = list.get(i); reordered.add(data); } catch(NumberFormatException nfe) { } } this.list = reordered; return null; } } 

型号

 public class Data { private String name; private String value; public Data() { } public Data(String name, String value) { this.name = name; this.value = value; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } } 

将此添加到您的xhtml文件中它将完美运行。它可能对使用primefaces 4.0或更低版本的其他人有所帮助。