我有一个非常简单的 jsf 应用程序。我想对 List.xhtml 中的行进行排序。我知道这些行来自#{friendsController.items}。如何以特定方式对这些项目进行排序?我不想按特定列对它们进行排序,我想“手动”对它们进行排序。我正在制定一套规则。这意味着我想将“X”行放在第一位,然后将“Y”排在第二位......提前感谢所有帮助。
PD:对不起我的英语,这是我的第二语言。
实际上,对于这个问题没有内置的 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 进行 1 次或多次调用,因此这些方法内部不应包含繁重的逻辑。