Sorting Primefaces“;sortBy=";不';行不通
我正在使用Primefaces+JSF开发一个应用程序。我的数据表工作正常,但在排序时出现问题,我尝试了排序(Sorting Primefaces“;sortBy=";不';行不通,sorting,jsf,jsf-2,primefaces,datatable,Sorting,Jsf,Jsf 2,Primefaces,Datatable,我正在使用Primefaces+JSF开发一个应用程序。我的数据表工作正常,但在排序时出现问题,我尝试了排序(sortBy=),但它不工作: 数据表显示所有行,我认为问题在于sortBy=或我的支持bean page.xhtml <h:body> <h:form id="pcEmulation"> <p:dataTable id="dataTablePCEMulation" var="pc" value="#{pCEmulationBe
sortBy=
),但它不工作:
数据表显示所有行,我认为问题在于sortBy=
或我的支持bean
page.xhtml
<h:body>
<h:form id="pcEmulation">
<p:dataTable id="dataTablePCEMulation" var="pc" value="#{pCEmulationBean.allPCEmulation}"
rows="10"
rowsPerPageTemplate="5,30,50,100,200,300"
emptyMessage="Não foi encontrado"
>
<f:facet name="header">
PC Emulation Web
</f:facet>
<p:column headerText="PC - TX OLO's" filterValue="#{pc.filtpcn}" filterMatchMode="contains" filterBy="#{pc.filtpcn}" >
<h:outputText value="#{pc.filtpcn}" />
</p:column>
<p:column headerText="Rota" sortBy="rota" >
<h:outputText value="#{pc.rota}" />
</p:column>
<p:column headerText="Origem">
<h:outputText value="#{pc.origem}" />
</p:column>
<p:column headerText="Antigo">
<h:outputText value="#{pc.epcn}" />
</p:column>
<p:column headerText="Destino">
<h:outputText value="#{pc.destino}" />
</p:column>
<p:column headerText="PC-Novo">
<h:outputText value="#{pc.realpcn}" />
</p:column>
</p:dataTable>
<p:blockUI block="dataTablePCEMulation" trigger="dataTablePCEMulation">
LOADING<br />
<p:graphicImage value="/images/loading.gif"/><br />
<p:graphicImage value="/images/tim-banner2.png" width="100px" height="45px"/>
</p:blockUI>
</h:form>
</h:body>
计算机仿真网
加载
支持bean:
@ManagedBean
//@ViewScoped
@SessionScoped
public class PCEmulationBean {
public List<PCEmulation> allPCEmulation;
public List<PCEmulation> getAllPCEmulation() {
PCEmulationDAO dao = new PCEmulationDAO();
try {
allPCEmulation = dao.getAll();
} catch (ClassNotFoundException | SQLException e) {
System.out.println("Problema no metodo list : " + e);
}
return allPCEmulation;
}
}
@ManagedBean
//@视域
@会议范围
公共类PCEmulationBean{
公共列表;
公共列表getAllPCEmulation(){
PCEmulationDAO=新的PCEmulationDAO();
试一试{
allPCEmulation=dao.getAll();
}catch(ClassNotFoundException | SQLException e){
System.out.println(“问题无方法列表:+e”);
}
返回allPCEmulation;
}
}
为了使排序工作,您需要使用getter每次返回相同的列表对象,在您的示例中,每次都从dao返回一个新列表。因此,只有当列表以前为空时,才应该获取新列表。getter中的代码应该如下所示
if (allPCEmulation == null) {
PCEmulationDAO dao = new PCEmulationDAO();
try {
allPCEmulation = dao.getAll();
} catch (ClassNotFoundException | SQLException e) {
System.out.println("Problema no metodo list : " + e);
}
}
return allPCEmulation;
据我所知,Datatable的sortBy属性仅应用于基本数据类型和字符串。若rota是一个对象,您必须自己创建排序方法。或者,使用sortBy=“#{pc.rota.someting}”,其中包含用于排序的基本数据类型或字符串。要将sortBy与对象一起使用,您需要指定指向一个方法的sortFunction属性,该方法从可比接口返回与compareTo方法相同的值集。不相关:JSF多次调用getter,因此,您不应该在其中包含任何数据库访问。它应该非常像这样:public X getY(){return y;}