Sansür, bir toplumun kendine olan güvensizliğini yansıtır ve otoriter rejimlerin belirgin bir özelliğidir.

--Potter Stewart

25.10.2012

PrimeFaces Datatable Column Custom Sorting

Popüler JSF kütüphanesi PrimeFaces'ın geliştiriciye yetenekli JSF bileşenleri sunduğu aşikar. Bu yeteneklerinin çoğunu showcase sayfasında sergilese de gözden kaçan gizli kalmış yeteneklerini de her zaman elinizin altında bulunması gereken kapsamlı dökümanını inceleyerek yakalayabilirsiniz.

Bunlardan biri de datatable bileşeninin sıralama yeteneğinde saklı. Basitçe kullanıcılarınızı ilk isimleri ile sıralamak istediğinizde işinize yarayacak aşağıdaki örnek, kullanıcının tam ismine göre sıralama yapmak istediğinizde elinizi bağlıyor:

<p:column width="100" sortBy="#{user.firstName}" >
 <f:facet name="header">
  <h:outputText value="Kullanici ismi" />
 </f:facet>

 <h:outputText value="#{user.firstName}" />
</p:column>

Yukardaki örnekte sortBy="#{user.firstName} #{user.lastName}" yapmamıza izin verilmiyor. Hemen akla kullanıcı tam ismini döndüren bir getter metot yazarak  sortBy="#{user.fullName}" yapmak akıllara gelebilir. Bu metot iki kolonu concat ederek bize tam ismi döndürmesi açısından kullanışlı olsa da ne var ki veri erişim katmanında Hibernate gibi bir kütüphane kullanıyorsanız buna da izin yok. Hibernate veritabanında ilişkilendirebileceği fullName isimli kolon bulamadığı için şikayet ediyor.

Bu aşamada yardımımıza datatable bileşeninin sortFunction yeteneği yetişiyor:

<p:column width="100" sortBy="#{user.firstName}" sortFunction="#{userBean.fullNameSorter}" >
 <f:facet name="header">
  <h:outputText value="Kullanici ismi" />
 </f:facet>

 <h:outputText value="#{user.fullName}" />
</p:column>

userBean managedbean'i içinde metodun gerçekleştirimi de şu şekilde basit bir compare işlemi ile halledilebilir:

public int fullNameSorter(User user1, User user2){
 Collator trCollator = Collator.getInstance(new Locale("tr","TR"));
 return trCollator.compare(user1.getFullName(), user2.getFullName());
}

Bol Javalar..