2014-09-12 3 views
2

Primefaces + JSF를 사용하여 응용 프로그램을 개발하고 있습니다. 내 데이터 테이블이 작동하지만의 종류 sortBy= 문제가, 내가 sortBy="#{pc.rota}"을 시도했지만 너무 작동하지 않습니다Primefaces "sortBy ="가 작동하지 않습니다.

데이터 테이블 쇼의 모든 행을, 내가 생각하는 문제는 sortBy= 또는 내 백업 콩.

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> 

백업 콩 :

@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; 
    } 

} 
+0

관련 없음 : JSF getter를 여러 번 호출하므로 데이터베이스 액세스가 없어야합니다. 그것은 excatly this처럼 보일 것입니다 : public X getY() { return y; } http://stackoverflow.com/questions/2090033/why-jsf-calls-getters-multiple-times/2090062#2090062 – S19

답변

11

정렬을 위해 당신이 게터, 귀하의 경우에 새를 반환하는과 같은 목록 개체 매번 반환해야 작동합니다 매번 DAO의 목록. 따라서 목록이 이전에 null 인 경우에만 새 목록을 가져와야합니다. 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; 
1

내가 아는 한 Datatable의 sortBy 속성은 기본 데이터 유형 및 문자열에만 적용됩니다. rota가 객체 인 경우 직접 정렬하는 메소드를 만들어야합니다. 다른 방법으로 정렬을위한 기본 데이터 형식 또는 문자열을 포함하는 sortBy = "# {pc.rota.someting}"을 사용합니다.

+1

Objets에서 sortBy를 사용하려면 해당 객체를 반환하는 메소드를 가리키는 sortFunction 속성을 지정해야합니다. Comparable 인터페이스의 compareTo 메소드와 같은 값 세트. – Yannick

관련 문제