Merhaba,

Projemde PrimeFaces kullanıyorum. Örneğin 50 tane DataTable ım var ve hepsinde de ortak özellikler misal paginatorPosition="bottom",scrollable="true" gibi bunun için araştırdığım kadarıyla PrimeFaces Classlarının üzerine override ederek yapılabiliyor. Fakat ben bunu yaptıktan sonra DataTable'daki filtre textboxları kayboldu. Bu problem PrimeFaces 4.0 versiyonunda oluşuyor. Fakat hiç birşeyi değiştirmeyip version 5.0 veya 5.1 kullandığımda herhangi bir problem oluşmuyor. Acaba nerede hata yapıyorum veyahut böyle birşeyi yapmamın farklı bir yolu mevcut mudur?

Faces-config.xml

    <?xml version="1.0" encoding="UTF-8"?>
<faces-config
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
    version="2.2">
    <component> 
        <component-type>org.primefaces.component.DataTable</component-type> 
        <component-class>com.webapp.jsf.DataTablosu </component-class> 
    </component>

</faces-config>

Class

 package com.webapp4.component;

import org.primefaces.component.datatable.DataTable;
    public class DataTablosu extends DataTable { 
    @Override 
    public String getPaginatorPosition() { 
        return "bottom"; 
    }

soruldu: 10 Kas '14, 17:38

kurtomerfaruk's gravatar image

kurtomerfaruk
1.3k222940
cevap kabul oranı: 29%

değiştirildi: 11 Kas '14, 06:15


Hatanın kaynağını bulmak için primefaces 5.0'daki değişikliklere bakman gerekecek. Buradan değişiklikleri inceleyebilirsin.

Alternatif çözüm olarak composite component kullanabilirsin. Ben composite component çözümünü tercih ediyorum.

Composite component için, webapp/resources altına coco adında bir dizin oluştur. Dizin içerisine myDt.xhtml dosyasını oluştur. composite:interface alanında datatable'ın değişken parametrelerini tanımlayabilirsin. composite:implementation alanında ise komponentlerini tanımlar ve interface'de tanımladığın değişkenlerini kullanabilirsin.

<ui:component 
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
    xmlns:p="http://primefaces.org/ui"
    xmlns:composite="http://xmlns.jcp.org/jsf/composite">

    <composite:interface>
        <composite:attribute name="id" />
        <composite:attribute name="update" />
        <composite:attribute name="process" />
        <composite:attribute name="value" />
        <composite:attribute name="paginatorPosition" default="bottom" />
        <composite:attribute name="var" />
    </composite:interface>

    <composite:implementation>
               <p:dataTable id="#{cc.attrs.id}" value="#{cc.attrs.value}" 
                            var="#{cc.attrs.var}"..............
                   <composite:insertChildren/>
                   <!-- Sayfalarında kullanacağın datatable tanımın... -->
               </p:dataTable>
        </composite:implementation>
</ui:component>

Datatable'ını kullanamak istediğin .xhtml'nin ui:composition alanına yazacağın

xmlns:coco="http://xmlns.jcp.org/jsf/composite/coco"

ifadesi ile composite componentleri çağırırsın.

<coco:myDt id="grd" update="@(form)" value="#{myBean.value}" process="panel" 
           listener="#{myBean.handleDoubleClick}" >
   <!-- Kolon Tanımları -->
</coco:myDt>

gibi bir ifadeylede datatable'ını kullanabilirsin.

permanent link

cevaplandı: 11 Kas '14, 02:16

SaRPaRDa's gravatar image

SaRPaRDa
5.0k213165
cevap kabul oranı: 27%

değiştirildi: 11 Kas '14, 04:52

Sanki bu işlem mevcut işlemden daha uzun ben işi kısaltmak ve sistematiğe çevirmek istiyorum. veyahut yanlış anladım. bu şekilde her sayfada mı tanımlama yapacağım veya bunu templatede yapacağım her seferinde p:datatable değilde coco:mydt olarak mı kullanacağım.

(11 Kas '14, 04:18) kurtomerfaruk kurtomerfaruk's gravatar image

Evet, componenti bir defa yazacaksın ve template gibi diğer sayfalarında coco:mydt olarak kullanacaksın. Komponenti nerede oluşturacağını cevapta yazmıştım.

(11 Kas '14, 04:20) SaRPaRDa SaRPaRDa's gravatar image

Cevabın en başında da belirttiğim gibi Primefaces migration guide'a bakarsan filtre'erin neden sorun oluşturduğunu görebilirsin.

Defining fields in sortBy-filterBy attributes is deprecated use a value expression instead.e.g. sortBy="#{user.name}" instead of sortBy="name"

(11 Kas '14, 07:32) SaRPaRDa SaRPaRDa's gravatar image
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:

×281
×97
×8

Soruldu: 10 Kas '14, 17:38

Görüntüleme: 847 kez

Son güncelleme: 11 Kas '14, 07:32

powered by BitNami OSQA