dataTable排序问题(JSF2.0 + primefaces)

我不知道为什么当我点击排序箭头时,我的dataTable没有对列进行排序。 它只适用于我首先在filter上键入内容并将其擦除。(就像它需要在filter上至少有一个字符才能正确排序)。

我会在这里粘贴代码:

这是带有dataTable的JSF页面

      

这里是与该页面交互的托管bean:

 @ManagedBean @ViewScoped implements Serializable public class ResultsController { @EJB private ISearchEJB searchEJB; private Garbage garbage; public List getAllGarbage() { return searchEJB.findAllGarbage(); } public Garbage getGarbage() { return garbage; } public void setGarbage(Garbage garbage) { this.garbage = garbage; } 

访问数据库的EJB:

 @Stateless(name = "ejbs/SearchEJB") public class SearchEJB implements ISearchEJB { @PersistenceContext private EntityManager em; public List findAllGarbage() { Query query = em.createNamedQuery("findAllGarbage"); List gList = new ArrayList(); for (Object o : query.getResultList()) { Object[] cols = (Object[]) o; Garbage tmpG = new Garbage(); tmpG.setFilename(cols[0].toString()); tmpG.setDescription(cols[1].toString()); tmpG.setUploadDate(cols[2].toString()); gList.add(tmpG); } return gList; } 

}

使用了具有JPQL命名查询的实体:

  @NamedQuery(name = "findAllGarbage", query = "SELECT g.filename, g.description, g.uploadDate FROM Garbage g;") @Entity public class Garbage implements Serializable{ @Id @GeneratedValue @Column(nullable = false) private Long id; @Column(nullable = false) private String filename; @Column(nullable = false) private String fileType; @Column(nullable = false) private String uploadDate; @Column(nullable = false) private String destroyDate; @Lob @Column(nullable = false) private byte[] file; @Column(nullable = false) private String description; 

带浏览器输出的打印屏幕

在此处输入图像描述

我想确认我遇到与primefaces-2.2.1描述的完全相同的问题。

我的dataTable的值(行元素)是从查询计算的。

在一个简单的名称上排序String属性会失败,除非我也有一个filterBy,即使这样,只有当我在filter框中输入至少一个字母时它才有效。 然后我可以在过滤结果中对升序/降序进行排序。

Webel

我的经验是,primefaces支持bean(ViewScoped!)必须拥有它自己的行列表。 因此,例如,如果每次请求p:dataTable时都查询数据库:值排序将不起作用。 解决方案:从数据库中收集列表并将其保存在辅助bean中的本地List变量中。

在您提供的代码中

 public List getAllGarbage() { return searchEJB.findAllGarbage(); } 

你得到每个请求的列表。 它不像设计那样工作。 希望有所帮助。

添加为答案而不是对以前的答案的评论

更新:Primefaces 3.5似乎修复了这个p:dataTable sortBy问题,我在2.2.1上报告并且仍然是3.3的问题。

但是,在Mac OS X上,p:dataTable仅在某些Max OS X版本的某些Firefox版本上正常工作。

在Mac OS X 10.6.8上的Firefox 20.0上都可以(两者仍然受支持)。

在Mac OS X 10.5.8(也是行尾)的Firefox 16.0.2(行尾)上有许多非常奇怪的问题,例如编辑图标显示为笔,勾,交叉和行编辑而不是激活,排序图标不显示,排序列标题爆炸,并重复奇怪地偏移到所有列标题的右侧。 在Mac OS X 10.5.8上,使用Primefaces 3.3在Firefox 16.0.2(终止行)上进行行编辑工作正常。

在Mac OS X 10.5.8上,行编辑和sortBy在Safari 5.0.6和Chrome 21.0.1180.90上都可以。

这些测试在Glassfish 3.1.1(在Netbeans7.1中)上进行。 Primefaces 3.3

http://code.google.com/p/primefaces/issues/detail?id=2476

http://forum.primefaces.org/viewtopic.php?f=3&t=14845

http://forum.primefaces.org/viewtopic.php?f=3&t=14838