使用JSF对List中的项进行排序

时间:2012-07-15 05:05:06

标签: jsf sorting

我有一个非常简单的jsf应用程序。我想对List.xhtml中的行进行排序。我理解这些行来自#{friendsController.items}。 如何以特定方式对此项目进行排序?我不想按特定列对它们进行排序,我想“手动”对它们进行排序。我正在制定一套规则。这意味着我想把行“X”放在第一位,然后将“Y”放在第二位...... 提前感谢所有的帮助。

PD:对不起我的英语,这是我的第二语言。

1 个答案:

答案 0 :(得分:0)

实际上,没有针对此问题的内置JSF解决方案(RichFaces和PrimeFaces中有拖放组件,但这些组件不适用于您的情况)。作为最后一个资源,有一个jQuery插件来处理这个和一个很好的教程(有一个很好的例子):

编辑(根据评论):

对于您的情况,您只需在填写项目后对列表进行排序。这种情况的代码示例:

@ManagedBean
@ViewScoped
public class MyBean {
    //attributes...
    private List<Element> myList;

    public MyBean() {
        myList = getMyListValues(); //just to get the idea
        Comparator<Element> comparator = new Comparator<Element>() {
            @Override
            public int compare(Element e1, Element e2) {
                //A basic logic for a comparator, assuming there is an Id attribute
                //in Element class. Also, make sure to test for null values (just in case...)
                return (e1.getId() > e2.getId()) ? 1 : (e1.getId() < e2.getId()) -1 : 0;
            }
        };
        Collections.sort(myList, comparator);
    }

    //getters and setters for the attributes...
}

对列表进行排序后,您可以使用<h:dataTable>进行显示,然后对其进行排序。

注意:不要在getMyList()方法中对列表进行排序,请记住,JSF框架会对getter和setter执行一次或多次调用,因此这些方法内部不应该有很重的逻辑。