2013-03-04 13 views
10

Sto cercando di implementare il multisort su Primeface datatable. Stiamo usando Primefaces v3.5. Ho creato un nuovo metodo di caricamento in LazyLoadClass che accetta il parametro List of SortMeta>.Ordinamento iniziale per PrimeFaces datatable con multisort

Ma sto riscontrando problemi nel caricamento iniziale della tabella. L'elenco di SortMeta> è nullo quando viene chiamato il metodo di caricamento. Ho anche provato senza specificare l'ordinamento iniziale e ordinamento per il datatable. In entrambi i casi il risultato è lo stesso.

Visto che abbiamo questa nuova classe SortMeta per supportare il multisort, ho il sospetto che anche il modo per specificare il campo di ordinamento iniziale e l'ordine sarebbe cambiato. Ma non ho trovato alcun esempio da nessuna parte per indicare la differenza. Il manuale 3.5 non menziona alcuna differenza.

Perché è possibile ottenere l'elenco di SortMeta> come null? Qualsiasi suggerimento sul codice di esempio in cui viene utilizzato il multisort con Lazyload?

+0

È necessario fornire un elenco di SortMeta per ordinareBy. –

+0

OK. In precedenza stavamo dando la stringa del nome della colonna, ma ora, come ho capito, l'abbiamo associata ad un oggetto List sul bean. Grazie! Ci proveremo. –

+0

@CagatayCivici Ho provato '' e ho creato preSortOrder come 'private void buildSortOrder() { SortMeta sm1 = new SortMeta(); \t \t sm1.setSortField ("resolvedDateTime"); m1.setSortOrder (SortOrder.DESCENDING); preSortOrder.add (SM1); \t \t \t } 'ma un NPE è gettato bcs il metodo encodeColumnHeader in DataTableRenderer sta accedendo UIColumn come' sortIcon = resolveDefaultSortIcon (columnSortByVe, meta.getColumn(). GetValueExpression ("sortby"), meta.getSortOrder(). Nome()) –

risposta

18

Sono riuscito a farlo funzionare.

In sostanza, è necessario fornire UIColumn nell'oggetto SortMeta affinché funzioni. Per l'ordinamento iniziale al momento del rendering, dovevo trovare il componente nel mio bean e assegnarlo a sortMeta.

Qui di seguito è il mio codice nella visualizzazione xhtml

 <p:dataTable id="transDataTable" var="trans" 
     value="#{myBean.transModel}" paginator="true" rows="50" 
     paginatorAlwaysVisible="false" lazy="true" 
     sortMode="multiple" sortBy="#{myBean.preSortOrder}" 
     resizableColumns="true"> 

     <p:column headerText="User" sortBy="#{trans.user.name}" > 
      #{trans.user.name} 
     </p:column> 
     <p:column headerText="Company" sortBy="#{trans.companyName}"> 
      #{trans.companyName} 
     </p:column> 
     <p:column headerText="Join Date" id="joinDateTime" 
      sortBy="#{trans.joinDateTime}" > 
      <h:outputText value="#{trans.joinDateTime}" /> 
     </p:column> 
    </p:dataTable> 

Ecco il mio codice di fagioli invitato @PostConstruct

 /* 
    * method to build initial sort order for multisort 
    */ 
    private void buildSortOrder() { 
     UIViewRoot viewRoot = FacesContext.getCurrentInstance().getViewRoot(); 
     UIComponent column = viewRoot.findComponent("transDataTable:joinDateTime"); 

     SortMeta sm1 = new SortMeta(); 
     sm1.setSortBy((UIColumn)column); 
     sm1.setSortField("joinDateTime"); 
     sm1.setSortOrder(SortOrder.DESCENDING); 
     preSortOrder.add(sm1);   
    } 

io non sono sicuro che questo è il modo giusto per fare questo, ma è lavori. Di solito sono scomodo quando dobbiamo usare gli id ​​da vista nel codice bean, in quanto ciò può introdurre bug quando le persone non sono attente.

Grazie a @CagatayCivici per il suggerimento veloce.

+1

Esattamente, scusate non ho avuto il tempo di fornire un campione completo, quindi potrei fornire solo un consiglio. Grazie per aver condiviso un esempio dettagliato. –

Problemi correlati