Primefaces Subtable ile Custom Exporter Kullanımı
Primefaces ile listemizi sıralı olarak göstermek için kullanılan yöntem datatable bileşinidir. Bu bileşen çok marifetli ve farklı kullanımlarını Primefaces Showcase sitesinden incelemek mümkün. Bu yazıda Primefaces Showcase’de de yer alan Datatable bölümünde olan Subtable bileşinine ve Subtable kullanarak bir çıktı almak istersek ne yapmak gerekir bunu anlatmaya çalışacağım.
Subtable bileşinini genellikle bir listenizin içerisinde bir liste var ve bunu bir üst listeye bağlı olarak listelemek istenildiğinde kullanılmaktadır. Örnek vermek gerekirse bir iller listeniz var bu iller listeniz içerisinde o ile bağlı yaşayan kişilerin listesi bulunmakta. Hem il ve o ile bağlı kişileri göstermek için çeşitli yollar olsa da en kullanılabilir ve pratik olanı Subtable’dir.
<p:dataTable value="#{ilController.illistesi}" var="il" rowIndexVar="row" id="ilTable"> <p:columnGroup type="header"> <p:row> <p:column headerText="İl Adı"/> <p:column headerText="Adı"/> <p:column headerText="Soyadı"/> </p:row> </p:columnGroup> <p:subTable value="#{il.kisilistesi}" var="kisi" id="kisiTable"> <p:column style="text-align: center!important;"> <h:outputText value="#{il.adi}"/> </p:column> <p:column> <h:outputText value="#{kisi.ad}"/> </p:column> <p:column> <h:outputText value="#{kisi.soyad}"/> </p:column> </p:subTable> </p:dataTable> </p:column> </p:dataTable>
Subtable görünümü Datatable bileşeninden farksız ancak liste içerisindeki onlarca listeyi göstermemiz mümkün olmaktadır.
Subtable kullanımı yukarıdaki gibi gelelim asıl meselemize. Datatable’dan Pdf, Excel ya da CVS çıktı almak için yine Primefaces’in DataExporter bileşinini kullanarak işlemi tamamlamaktayız. Ancak burada bir sorun var! Primefaces 6.0.x sürümü ve öncesine kadar eğer Subtable bileşini kulanıyorsanız DataExporter’dan bir export işlemi gerçekleştiremiyorsunuz. Yani çalışmıyor!
Niye çalışmadığını bilmiyorum ancak bunun yine Primefaces tarafından bir çözümü yapılmış. PrimeFaces Extensions kullanarak ( İlgili Yazı : PrimeFaces Extensions Nedir? ) olurduğunuz Subtable’den export işlemi yapılabilmekte.
Kullanımı;
<p:commandLink id="xls" ajax="false"> <f:setPropertyActionListener value="false" target="#{exporterController.customExporter}" /> <pe:exporter type="xlsx" target="kisiTable" fileName="kisiListesi" subTable="true" /> </p:commandLink>
diyerek yukarıda oluşturduğumuz Subtable içerisindeki bilgileri excel olarak çıktı alabilmekteyiz. Bu işlemi yapmamıza rağmen bir sonuç elde edemiyorsanız sorun exporterController.customExporter classını bulamamasındandır. Ben bu sorunu yaşadım. Bu sorunu çözmek için kendim bu clası projeme eklemek zorunda kaldım.
/* * Copyright 2011-2015 PrimeFaces Extensions * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * $Id$ */ package org.primefaces.extensions.showcase.controller; import java.io.Serializable; import javax.faces.bean.ApplicationScoped; import javax.faces.bean.ManagedBean; /** * ExporterController * * @author Sudheer Jonna / last modified by $Author$ * @version $Revision$ * @since 1.0 */ @ManagedBean @ApplicationScoped public class ExporterController implements Serializable { private static final long serialVersionUID = 20120316L; private Boolean customExporter; public ExporterController() { customExporter=false; } public Boolean getCustomExporter() { return customExporter; } public void setCustomExporter(Boolean customExporter) { this.customExporter = customExporter; } }
Bu işlemleri yaparak subtable’dan export işlemini kolayca yapabilirsiniz.
No Comment! Be the first one.