Sunday, December 15, 2013

ADF table multiple selection tanpa business component

Ada kalanya saat menggunakan ADF, kita mem-bind suatu table tidak melalui business component, misalnya data tersebut tidak berasal dari database, bisa jadi hasil dari suatu kalkulasi di engine tertentu dan resultnya berupa list, atau bisa juga data didapat dari invokasi service (soap/rest).

Melalui artikel ini saya ingin berbagi trik yang saya lakukan untuk melakukan multiple selection di adf table yang bindingnya tidak melalui business component, tetapi di-binding ke Object List yang ada di backing bean atau managed bean.

Kita tambahkan property boolean pada Object yang digunakan:
 public class AnObject{  
   private int id;  
   private String code;  
   private String description;  
   private boolean selected; // <- add this boolean property  
   //setter getter  
 }  

dan kita tambahkan checkbox di kolom table:
 <af:commandButton text="Print Selected" action="#{TestPageBacking.printSelected}"/>  
 <af:table var="row" rowBandingInterval="0"  
      value="#{TestPageBacking.listObject}"  
      styleClass="AFStretchWidth"  
      columnStretching="last">  
   <!-- add this checkbox column -->  
   <af:column sortable="false" headerText="" width="20">  
     <af:selectBooleanCheckbox value="#{row.selected}"/>  
   </af:column>  
   <af:column sortable="false" headerText="id" width="200">  
     <af:outputText value="#{row.id}"/>  
   </af:column>  
   <af:column sortable="false" headerText="code">  
     <af:outputText value="#{row.code}"/>  
   </af:column>  
   <af:column sortable="false" headerText="description">  
     <af:outputText value="#{row.description}"/>  
   </af:column>  
 </af:table>  

di backing bean (TestPageBacking), di method printSelected dibuat checker utk object yang selected:
 private List<AnObject> listObject;  
 public void printSelected(){  
  System.out.println("selected objects:");  
  for(int i=0; i<listObject.size();i++){  
   if(listObject.get(i).isSelected()){  
    AnObject ao = listObject.get(i);  
    System.out.println("- "+ao.getId()+", "+ao.getCode()+", "+ao.getDescription());  
   }  
  }  
 }  
 //setter getter listObject   

contoh tampilannya:

bila di-klik button Print Selected, maka akan terlihat di log:
 selected objects:  
 - 1, satu, object pertama  
 - 3, tiga, object ketiga  

Semoga berguna.

No comments:

Post a Comment