PrimeFaces'de datatable ile veri tablo şeklinde gösterilebilir. Datatable'ın editable özelliği true yapılarak, tablo üzerinde verilerin değerleri değiştirilebilir. Aşağıda datatable sayfası gösterilmektedir:
<p:dataTable id="dt" var="_item" value="#{configurationBean.list}" editable="true">
<p:ajax event="rowEdit" listener="#{configurationBean.onRowEdit}"/>
<p:column headerText="Anahtar">
#{_item.key}
</p:column>
<p:column headerText="Değer">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{_item.value}"/>
</f:facet>
<f:facet name="input">
<h:inputTextarea value="#{_item.value}" rows="10" cols="50"/>
</f:facet>
</p:cellEditor>
</p:column>
<p:column>
<p:rowEditor />
</p:column>
</p:dataTable>
Yukarıdaki örnekte bir satırda iki sütun bulunmaktadır. Birinci sürun key alanıdır ve edit edilmemekte sadece gösterilmektedir. İkinci sütün ise value alanını ve edit edilecek alandır. Değer alanına bu nedenle bir p:cellEditor koyulmuştur. cellEditor içinde facet name'i output alanı veri gösterilirken , facet name'i input olan alan ise veri edit edilirken kullanılınır. Son sütunda ise rowEdit ile edit yapılmak için düğme koyulmaktadır.
Bean tarafı ise aşağıdaki gibidir:
@ManagedBean
@ViewScoped
public class ConfigurationBean implements Serializable{
List<ConfigurationItem> list;
public List<ConfigurationItem> getList() throws DatabaseException{
if(list==null){
ConfigurationManager configurationManager=new ConfigurationManager(true);
list=configurationManager.getConfigurationList();
}
return list;
}
public void onRowEdit(RowEditEvent event) throws DatabaseException {
ConfigurationItem item=(ConfigurationItem)event.getObject();
ConfigurationManager configurationManager=new ConfigurationManager(true);
configurationManager.update(item);
}
}
getList() methodu configurationitem'lardan oluşan bir listeyi döndürmektedir. ConfigurationItem key ve value değeri bulunan basit bir sınıftır. ConfigurationManager ise veritabanından veri çekmek için kullanılan bir sınıftır. onRowEdit methodu ise, tablo üzerinde bir satır düzenlenmesi tamamlandığında çağrılmaktadır. event.getObject() ile edit edilen veri alınmakta ve veritabanında update edilmektedir