Merhaba, öncelikle iyi çalışmalar diliyorum. Primefaces Autocomplete bileşenini kullanmam gerekti ve gerek primefaces sitesinden gerek internet ortamında yaptığım arama sonuçlarında tam olarak bileşeni kullanmayı başaramadım. Çoğunlukla birbirinin benzeri veya birebir kopyası çalışmalar ve genelde bir List oluşturulup manuel olarak değerler girerek işlem yapılmış, dizi mantığını tam kavrayamadığım için sanırım, yazmam gereken method ve bu method içerisindeki değeri Autocomplete bileşenine göndermeyi başaramadım. Bu konuda yardımcı olursanız çok memnun olurum. Projenin kodları

Kurumlar sınıfı

public class kurumlar {
private Integer id;
private String kurumadi;

public Integer getId() {
    return id;
}
public void setId(Integer id) {
    this.id = id;
}
public String getKurumadi() {
    return kurumadi;
}
public void setKurumadi(String kurumadi) {
    this.kurumadi = kurumadi;
}

}

Kurumlar_bean

@ManagedBean
@RequestScoped
public class kurumlar_bean {
private kurumlar kurum=new kurumlar();

public kurumlar getKurum() {
    return kurum;
}
public void setKurum(kurumlar kurum) {
    this.kurum = kurum;
}

public List<kurumlist> kurumlistesinigetir() throws Exception {

    try {     
        databaseBaglanti dbcon=new databaseBaglanti();    
        PreparedStatement pst=dbcon.dbbaglanti().prepareStatement("select KURUM_TUR,KURUM_ADI from KURUM_TBL WHERE KURUM_TUR=1");
        ResultSet rs=pst.executeQuery();
        while (rs.next()) {
            kurumlar liste=new kurumlar();
            liste.setKurumadi(rs.getString("KURUM_ADI"));
            veriler.add(liste);                
        }
dbcon.dbbaglanti.close;
pst.close;
rs.close;
}      
        catch (Exception e) {
        exceptionmesaj=e;
    }
   }
    public kurumlar_bean() {
}

}

public List<kurumlist> kurumlistesinigetir() metodu ile datatable 'a verileri çekiyorum ama aynı verileri AutoComplete için kullanamadım. Yardımcı olursanız çok memnun olurum. Teşekkür ederim.

soruldu: 18 Ara '14, 11:41

azizc's gravatar image

azizc
5181010
cevap kabul oranı: 0%

Bazı durumları görünüyor kurumlistesinigetir() return değeri yoktur. İkincisi veriler.add(liste); burada veriler nerede tanımlanıyor. Bir de xhtml sayfanı paylaşırsan nerede hata var görebilmemiz daha kolay olur ve daha çabuk sonuca ulaşılabilir.

(18 Ara '14, 12:17) kurtomerfaruk kurtomerfaruk's gravatar image

Ömer Faruk bey, öncelikle ilginize teşekkür ederim. Soruyu yazarken kullandığım kodların içeriğinde belki yazım hatası veya unutulmuş kısımlar olabilir (veriler değişkeninin tanımlandığı kısmı yazmayı unutmuşum sanırım) ama yukarıdaki Kurumlar sınıfı ve Managed Bean kodlarında herhangi bir sorun yok ve bahsettiğim gibi, public List<kurumlist> kurumlistesinigetir() methodu ile kurum tablosundaki kurum alanında bulunan verileri datatable ile görüntüleyebiliyorum. xhtml sayfamda sadece primefaces AutoComplete bileşeni var ve bu bileşene değer göndermeyi yapamadım. İnternet ortamında baktığım örnekleri bir türlü kendi projeme uyarlayamadım. Eğer mahsuru yoksa, sql sorgusu ile tablodan çektiğim kurum alanındaki verileri, AutoComplete bileşeninde nasıl görüntüleyebilecğimle ilgili bir method örneği verirseniz çok memnun olurum.

(18 Ara '14, 13:55) azizc azizc's gravatar image

Merhaba,

eğer eksiklikler haricinde bir sorun yok ise şu şekilde bir revize ederseniz çalışacak diye düşünüyorum

Burayı

PreparedStatement pst=dbcon.dbbaglanti().prepareStatement("select KURUM_TUR,KURUM_ADI from KURUM_TBL WHERE KURUM_TUR=1");

bu şekilde

PreparedStatement pst=dbcon.dbbaglanti().prepareStatement("select ID,KURUM_ADI from KURUM_TBL WHERE KURUM_TUR=1");

Burayı da

       while (rs.next()) {
            kurumlar liste=new kurumlar();
            liste.setKurumadi(rs.getString("KURUM_ADI"));
            veriler.add(liste);                
        }

bu şekilde

       while (rs.next()) {
            kurumlar liste=new kurumlar();
            liste.setId(rs.getInteger("ID"))
            liste.setKurumadi(rs.getString("KURUM_ADI"));
            veriler.add(liste);                
        }

Problemin List<kurumlist> dönen değerlerin uyuşmaması gibi görünüyor.

permanent link

cevaplandı: 18 Ara '14, 14:06

kurtomerfaruk's gravatar image

kurtomerfaruk
1.3k222940
cevap kabul oranı: 29%

Tekrar teşekkür ederim, kodlar iş yerimdeki bilgisayarımda olduğundan yarın deneyip buraya yazarım tekrar. Autocomplete içinde <p:autocomplete value="?" completemethod="#{kurumlar_bean.kurumlistesinigetir()}"/> value değeri yerine neyi yazmam gerekiyor diye sorsam kusuruma bakmazsınız umarım. Sizin de bahsettiğiniz gibi methodun dönen değeri ile ilgili bir uyuşmazlık var ve orada takıldım. Sql sorgusu sonucu Datatable ile görüntülediğim değerleri AutoComplete ile görüntüleyemiyorum.

(18 Ara '14, 14:16) azizc azizc's gravatar image

value değerine siz orada neyi tutmak istiyorsanız id yi mi yoksa kurumAdini mi tutmak istiyorsunuz sonradan kullanmak için onu yazmanız gerekir

(18 Ara '14, 14:20) kurtomerfaruk kurtomerfaruk's gravatar image

Anladığım kadarıyla kurum tipi 1 olan kayıtlar içerisinden arama yaptırmak istiyorsun. Ama bu şekilde yazılmış olan autocomplete her karakter girilmesinde veritabanından aynı kayıtları tekrar çağırır.

Ayrıca autoComplete'in kullandığı fonksiyonun String bir değişkene ihtiyacı var.

Bir diğer konu, autoComplete'e pojo sınıfını gönderirsen converter ile kullanacağı datayı tanıtmak gerekir.

Veriler listesinin doğru şekilde geldiğini varsayarsak aşağıdaki değişikliklerle deneyebilirsin;

@ManagedBean
@RequestScoped
public class kurumlar_bean {
private kurumlar kurum=new kurumlar();
private List<kurumlist> veriler = new ArrayList<>();

public kurumlar_bean() {
     kurumlistesinigetir(); //Sayfanın yüklenmesi esnasında veriler tablosunu dolduruyoruz. Bir daha almaya gerek kalmasın...
}

//Veriler listesinin içerisinden kullanıcının aradığı bilgiyi süzen fonksiyon.
public List<kurumlist> kurumListesiniSuz(String query) {
        List<kurumlist> filteredData = new ArrayList<>();
        for (int i = 0; i < veriler.size(); i++) {
            kurumlist veri = veriler.get(i);
            if(veri.getKurumAdi().toLowerCase().contains(query)) {
                filteredData.add(veri);
            }
        }
        return filteredData;
}

private void kurumlistesinigetir() throws Exception {
.....
...
}

}

getter- setter

autoComplete, gönderdiğin sınıfı tanımaz. Gönderilen sınıfın içerisindeki bir kaydı bulması gerektiğinde veya bir kaydın id'sini kullanmak istediğinde converter'e ihtiyaç duyar.

converter:

import javax.el.ValueExpression;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import java.util.List;

@FacesConverter("kurumConv")
public class KurumConverter implements Converter {
    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        if (value != null && value.trim().length() > 0) {
            int val = Integer.parseInt(value);
            ValueExpression ve = context.getApplication().getExpressionFactory().createValueExpression(context.getELContext(), "#{kurumlar_bean.veriler}", Object.class);
            Object cd = ve.getValue(context.getELContext());

            @SuppressWarnings("unchecked")
            List<kurumlist> listDto = (List<kurumlist>) cd;

            for (kurumlist d : listDto) {
                if (d.getId()==val) {
                    return d;
                }
            }
        } else {
            return null;
        }

        return null;
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        if (value == null || value.equals("")) {
            return "";
        } else {
            kurumlist dto = (kurumlist) value;
            return Integer.toString(dto.getId());
        }
    }
}

ve son olarak autoComplete;

<p:autoComplete id="acKurum" value="#{kurumlar_bean.kurum}" completeMethod="#{kurumlar_bean.kurumListesiniSuz}"
                        var="kur" itemLabel="#{kur.kurumadi}" itemValue="#{kur}" converter="kurumConv" forceSelection="true" />

Kodları test etmedim. Hatalar çıkabilir. Genel olarak mantık bu şekilde işler.

permanent link

cevaplandı: 18 Ara '14, 19:16

SaRPaRDa's gravatar image

SaRPaRDa
5.0k213165
cevap kabul oranı: 27%

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:

×97

Soruldu: 18 Ara '14, 11:41

Görüntüleme: 641 kez

Son güncelleme: 18 Ara '14, 19:19

powered by BitNami OSQA