我不知道为什么当我点击排序箭头时,我的dataTable没有对列进行排序。它只适用于我首先在过滤器上键入内容并将其删除。(就像它需要在过滤器上至少有一个字符才能正确排序)。
我会在此处粘贴代码:
这是带有dataTable的JSF页面
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:t="http://myfaces.apache.org/tomahawk"
xmlns:p="http://primefaces.prime.com.tr/ui">
<ui:composition template="WEB-INF/templates/BasicTemplate.xhtml">
<ui:define name="resultsForm">
<h:form enctype="multipart/form-data">
<h:inputText id="search" value="" /><h:commandButton value="search"/>
<p:dataTable var="garbage" value="#{resultsController.allGarbage}" dynamic="true" paginator="true" paginatorPosition="bottom" rows="10"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="5,10,15">
<p:column filterBy="#{garbage.filename}" filterMatchMode="startsWith" sortBy="#{garbage.filename}" parser="string">
<f:facet name="header">
<h:outputText value="Filename" />
</f:facet>
<h:outputText value="#{garbage.filename}" />
</p:column>
<p:column filterBy="#{garbage.description}" filterMatchMode="contains">
<f:facet name="header">
<h:outputText value="Description" />
</f:facet>
<h:outputText value="#{garbage.description}" />
</p:column>
<p:column sortBy="#{garbage.uploadDate}" parser="string">
<f:facet name="header">
<h:outputText value="Upload date" />
</f:facet>
<h:outputText value="#{garbage.uploadDate}" />
</p:column>
</p:dataTable>
</h:form>
</ui:define>
这里是与该页面交互的托管bean:
@ManagedBean
@ViewScoped implements Serializable
public class ResultsController {
@EJB
private ISearchEJB searchEJB;
private Garbage garbage;
public List<Garbage> 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<Garbage> findAllGarbage() {
Query query = em.createNamedQuery("findAllGarbage");
List<Garbage> gList = new ArrayList<Garbage>();
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;
带浏览器输出的打印屏幕
答案 0 :(得分:3)
我的经验是,主要支持bean(ViewScoped!)必须拥有它自己的行列表。因此,例如,如果每次请求p:dataTable时都查询数据库:值排序将不起作用。解决方案:从数据库中收集列表并将其保存在辅助bean中的本地List变量中。
在您提供的代码中
public List<Garbage> getAllGarbage() {
return searchEJB.findAllGarbage();
}
您可以获得每个请求的列表。它并没有像设计那样工作。希望有所帮助。
答案 1 :(得分:2)
我想确认我遇到与primefaces-2.2.1描述的完全相同的问题。
我的dataTable的值(行元素)是从查询计算的。
对一个简单的名称进行排序String属性会失败,除非我也有一个filterBy,即使这样,只有当我在过滤器框中输入至少一个字母时它才有效。然后我可以在过滤结果中对升序/降序进行排序。
Webel
答案 2 :(得分:1)
添加了答案,不再对以前的答案发表评论
更新: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