2013-03-04 17 views
10

ile veritabamı Primeface veritabamında multisort'u uygulamaya çalışıyorum. Primefaces v3.5 kullanıyoruz. LazioLoadClass içinde SortMeta> parametresini içeren yeni bir yükleme yöntemi oluşturdum.PrimeFaces için başlangıç ​​sortorder çok noktaya yayın

Ancak tablonun ilk yüklemesinde sorunlar yaşıyorum. LoadMeta> listesi, yükleme yöntemi çağrıldığında boştur. Ayrıca datatable için ilk sortBy ve sortOrder belirtmeden denedim. Her iki durumda da sonuç aynıdır.

Bu yeni sınıf SortMeta'nın çoklu dağıtımı desteklediğini gördüğümde, ilk sıralama alanını ve sırasını belirtmenin yolunun da değişeceğini sanıyorum. Ama farkı gösterecek herhangi bir yer bulamadım. Kılavuz 3.5 herhangi bir farklılıktan bahsetmiyor.

Neden SortMeta Listesinin Listesini null olarak alıyor olabiliriz? Multisort'un Lazyload ile kullanıldığı örnek koddaki herhangi bir işaretçi var mı?

+0

SortBeta'nın sortBy'ye bir listesini sağlamanız gerekir. –

+0

Tamam. Daha önce kolonun adının dizgisini veriyorduk, ama şimdi anladığım kadarıyla fasulyedeki bir List nesnesine bağlandık. Teşekkürler! Bunu deneyeceğim. –

+0

@CagatayCivici Denedim 've ben preSortOrder öğesini "private void buildSortOrder() { SortMeta sm1 = new SortMeta() olarak oluşturdu; \t \t sm1.setSortField ("resolvedDateTime"); m1.setSortOrder (SortOrder.DESCENDING); preSortOrder.add (SM1); \t \t \t } ', ancak bir NPE DataTableRenderer yöntem encodeColumnHeader 'sortIcon = resolveDefaultSortIcon (columnSortByVe, meta.getColumn(). GetValueExpression ("SortBy"), meta.getSortOrder() olarak UIColumn erişen BCS atılır. Ad()); ' –

cevap

18

Bunu işe alabiliyordum.

Temel olarak UIColumn'u çalışması için SortMeta nesnesine vermemiz gerekir. Oluşturma sırasındaki ilk sıralama için, fasulyemdeki bileşeni bulmalı ve bunu sortMeta'ya atadım. Aşağıda

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

Bunu yapmak için doğru bir yol olduğundan emin değilim benim fasulye kodunu denir görünüm xhtml İşte

 <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> 

benim kod, ancak Eserleri. İnsanların dikkatli olmadıkları zaman böcekleri tanıtmak zorunda olduğumuzdan, ids 'i fasulye kodundan görmek gerektiğinde genellikle rahatsız olurum.

Hızlı ipucu için teşekkürler @CagatayCivici.

+1

Tam olarak, ben tam bir örnek sağlamak için hiç zamanım olmadığından, sadece bir ipucu verebilirdim. Detaylı bir örneği paylaştığınız için teşekkür ederiz. –

İlgili konular