Primefaces'ın showcase'inde verdiği örnek on numara kolpa. İşten anlamayan ben bile o kodu oraya koyup lazy demezdim. O konuda Çağtaycığıma çok kırgınım. Çünkü showcase'deki mantığa göre proje init olduğunda @PostConstruct ile bütün veriyi çek diyor. Bunun neresi lazy anlamadım. Belki ben kolpa bir insanım. Lazy öyle oluyorsa bana biri nedeni açıklarsa sevinirim.

Benim case'e gelirsek, tam 1.5 dk süren bir select işlemim var. Nerdeyse bütün table'lardan bilgiler çekerek 5 bin adet sonuç dönüyor. Bu işlem için veriyi tek seferde çekmek yerine 10'arlı sayfalar halinde(paginator ile yani) çekmem şart. Yani benim select'imin en mantıklısı her 10'luk için database'e gidip döndermek. Bu şekil işlem saniyeler sürüyor. Bunu için bana bir örnek bulabilcek veya yazabilecek var mı? Acayip yeniyim Primefaces'de her türlü yardım bilgi benim için çok değerli. Ayrıca sıralama(sort) işlemi ve filtreleme(filter) işlemini bütün veriyi tarayarak nasıl yaparım. İşte bunu yapabilirsem dönüp koda derim ki; "ne kadarda lazy bir kod". Diğer türlüsü; "ne kadarda kolpa lazy bir kod" olur benim için. Yardımlarınızı bekliyorum arkadaşlar.

Son olarak buradan Rusya'daki bütün gurbetçilere selam olsun. Moralleri bozmayın.

soruldu: 30 Kas '15, 08:51

sin's gravatar image

sin
700162536
cevap kabul oranı: 13%


Merhabalar Primefaces Datatable lazy işlemini yapabilmeniz için öncelikle şunu belirtmek isterim datatable lazy=true dedikten sonra ve datatable bir dialog içerisine aldıktan sonra diaog içerisine dynamic=true derseniz sayfa açılışında hiçbir şekilde veri çekmezsiniz.Fakat dialog tetiklendikten sonra verileriniz yüklenmeye başlar.Lazy mantığında lazy içerisindeli load methodu veri tabanı tarafına vermiş olduğunuz değerler kapsamında select çekecektir.Yani 100 tane kayıt varsa ve bunları 10 lu olarak çekmek isterseniz bu Primefaces tarafından load tarafına gelir ve tabikide bundan sonra gerçekleşecek sql i sizin yapmanız beklenmektedir.Bununla ilgili daha detaylı bilgi isterseniz ben Primefaces ve Hibernate kullanarak Lazy metodunu gayet verimli bir şekilde kullanmaktayım.

permanent link

cevaplandı: 30 Kas '15, 15:26

caglarturkurka's gravatar image

caglarturkurka
6653712
cevap kabul oranı: 6%

Yardımların için teşekkür ederim Çağlar. Verimli bir şekilde kullandım dediğin örneklerden verme şansın varsa memnun olurum. Şimdi yukarıda bahsettiğin gibi deneyeceğim. Ama fırsatın ve zamanın olursa senin örneğini görmek isterim.

(01 Ara '15, 02:02) sin sin's gravatar image

Merhabalar burada aşağıdaki kod tarafında lazy=true olarak gönderilmektedir.Bu şekilde burada value değerini çeken classtan bunun lazy olması sağlanmaktadır.

<p:dataTable
     id="#{cc.attrs.id}"
     widgetVar="#{cc.attrs.widgetVar}"
     value="#{cc.attrs.value}"
     lazy="#{cc.attrs.lazy}"
        ............ >
</p:dataTable>

Not:Yukarıdaki value attribute şunu yazmış bulunmaktayım value ="#{bondActionFormBean.genericGridDialogBean.items}" ve ayrıca GenericDialogBean sınıfı şu şekildedir.

@Named
@ViewScoped
public class GenericGridDialogBean<T extends BaseIdModel> implements Serializable {

    private static final long serialVersionUID = -6897068402587874744L;

    private LazyGenericDataModel<T> items;

    private DataTable dataTable;

    private GenericServiceImpl<T> service;

    private Map<String,Object> paramFilterMap;

    public void init() {
        if(paramFilterMap==null){
            paramFilterMap = new HashMap<String, Object>();
            paramFilterMap.put("userPrm.tblId", SecurityUtils.getCurrentUser().getTblId());
        }

        items = new LazyGenericDataModel<T>(service,paramFilterMap);
    }

    // TODO call this from tenderCreateForm after every crud 
    public void refresh(){
        if(dataTable != null){
            dataTable.loadLazyData();
        }
    }

    public Map<String, Object> getParamFilterMap() {
        return paramFilterMap;
    }

    public void setParamFilterMap(Map<String, Object> paramFilterMap) {
        this.paramFilterMap = paramFilterMap;
    }

    public LazyGenericDataModel<T> getItems() {
        return items;
    }

    public void setItems(LazyGenericDataModel<T> items) {
        this.items = items;
    }

    public GenericServiceImpl<T> getService() {
        return service;
    }

    public void setService(GenericServiceImpl<T> service) {
        this.service = service;
    }
}

Not:Buradaki aslında asıl işi yapan bu class içerisindeki private LazyGenericDataModel<t> items; property sidir.Ayrıca LazyGenericDataModel classı aşağıda tanımlandığı gibidir.

public class LazyGenericDataModel<T extends BaseIdModel> extends LazyDataModel<T> {
private static final long serialVersionUID = -41894099424759541L;

    private GenericServiceImpl<T> service;
    private Map<String,Object> paramFilterMap;

    public LazyGenericDataModel(GenericServiceImpl<T> service,Map<String,Object> paramFilterMap) {
        this.service = service;
        this.paramFilterMap=paramFilterMap;
    }

    @Override
    public T getRowData(String rowKey) {
        return (T) service.getById(Long.parseLong(rowKey));
    }

    @Override
    public Object getRowKey(T jobAccComission) {
        return ((BaseIdModel) jobAccComission).getTblId();
    }

    @Override
    public List<T> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String,Object> filters) {

        if(filters==null || filters.isEmpty()){
            filters = new HashMap<String, Object>();
        }
        if(paramFilterMap!=null && !paramFilterMap.isEmpty()){
            filters.putAll(paramFilterMap);
        }
        this.setRowCount((int) service.rowCount(filters));// TODO make safe cast

        return (List<T>) service.load(first, pageSize, sortField, GenericDaoImpl.SortOrder.valueOf(sortOrder.name()), filters);
    }
}

Not:Burada dikkat edilmesi gereken bu classın Primefaces ten gelen LazyDataModel classından extends olması ve burada load metodunu düzgün bir şekilde implement etmenizdir.Umarım bu yazdıklarım sizlere yardımcı olur eğer işin içinden çıkılmaz bir hale geldiyse Skype var ise sizlere yardımcı olabilirim.

permanent link

cevaplandı: 01 Ara '15, 17:33

caglarturkurka's gravatar image

caglarturkurka
6653712
cevap kabul oranı: 6%

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×1,079
×109
×97

Soruldu: 30 Kas '15, 08:51

Görüntüleme: 364 kez

Son güncelleme: 02 Ara '15, 04:41

powered by BitNami OSQA