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