Merhaba,yeni bir üye olarak ben ve benim gibi amatör arkadaşlara bulunmaz bir nimet olduğu için, sitenin yapımında emeği geçen ve sorulara cevap veren arkadaşlara teşekkür ediyorum.

Java Server Faces konusuna yeni başlamış birisi olarak, JSF+Primefaces ile amatörce bir proje geliştirmeye çalışıyorum. Sorunumla ilgili sitede benzer konular olmakla birlikte, açık söylemek gerekirse henüz acemi olduğum için ya ben cevapları anlayamadım ya da tam olarak sormak istediğim konu ile ilgili değildi, lütfen kusuruma bakmayın. Sorunum şu; sayfada, bir selectonemenu içerisindeki değere göre sorgulama yapıp, dönen liste verisini PF Datatable üzerinde görüntüleyip, Datatable selection özelliğini kullanarak seçilen verinin detaylarını dialog içerisinde göstererek farklı bir işlem yapıyorum. Aslında bu konuda bir sorunum yok, fakat selectonemenu içerisindeki değeri değiştirip tekrar sorgulama yaptığımda, Managed Bean=Session Scope olduğu için datatable içerisindeki veriler yenilenmiyor, eski sorgudan kalan verilerin üzerine yeni sorgu sonucu gelen verileri yazıyor. Managed Bean=Request Scope yapıyorum, selectonemenu değerini değiştirip sorgu yaptığımda datatable verileri yenileniyor fakat bu defa datatable selection özelliğini kullanamıyorum, selection için tanımladığım değişkenle ilgili java.lang.NullPointerException hatası alıyorum ve dialog içerisindeki detay bilgi alanları boş geliyor. Bu konuda, Managed Bean=Session Scope olduğu halde, Primafaces Datatable verilerini refresh yapıp her sorguda tekrar yüklemek için araştırma yaptım fakat beceremedim, bu konuda ne yapabilirim konusunda yardımcı olursanız çok memnun olurum.

Bean Sınıfım

@ManagedBean
@SessionScoped
public class hastalistesi_bean implements Serializable {

@ManagedProperty(value = "#{user_bean}")

private user_bean user;    
private List<hastalistesi_pojo> veriler = new ArrayList<hastalistesi_pojo>();
private hastalistesi_pojo secilenkayit;   
private hastalistesi_pojo secilenveriyiaktar = new hastalistesi_pojo();
private String hastailcesi;

/* get ve set methodlar */

public List<hastalistesi_pojo> listele() throws Exception {
    pg_con baglanti = new pg_con();
    PreparedStatement pst_hastalistele = baglanti.dbbaglanti().prepareStatement("select * from hasta_tbl where h_ilce=?");
    pst_hastalistele.setString(1, getHastailcesi());
    ResultSet rs_hastalistele = pst_hastalistele.executeQuery();
    while (rs_hastalistele.next()) {
        hastalistesi_pojo hl = new hastalistesi_pojo();
        hl.setHasta_id(rs_hastalistele.getInt("h_id"));
        hl.setHasta_tcno(rs_hastalistele.getString("h_tcno"));
        hl.setHasta_adsoyad(rs_hastalistele.getString("h_adsoyad"));
        hl.setHasta_adres(rs_hastalistele.getString("h_adres"));
        hl.setHasta_ilce(rs_hastalistele.getString("h_ilce"));
        hl.setHasta_telefon(rs_hastalistele.getString("h_telefon"));
        hl.setHasta_muakurum(rs_hastalistele.getString("h_muayenekurum"));
        veriler.add(hl);

    }
    baglanti.dbbaglanti().close();
    pst_hastalistele.close();
    rs_hastalistele.close();
    return veriler;
}

public void secilenveriyikaydet() throws Exception {
    secilenveriyiaktar.setHasta_id(getSecilenkayit().getHasta_id());
    secilenveriyiaktar.setHasta_adsoyad(getSecilenkayit().getHasta_adsoyad());
}

public void guncelle() throws Exception {
    pg_con baglanti2 = new pg_con();
    PreparedStatement pst_guncelle = baglanti2.dbbaglanti().prepareStatement("update hasta_tbl set yonlendirilen=? where h_id=?");
    pst_guncelle.setString(1, user.getUser_adsoyad());
    pst_guncelle.setInt(2, getSecilenkayit().getHasta_id());
    pst_guncelle.executeUpdate();
    pst_guncelle.close();
    baglanti2.dbbaglanti().close();
}

public hastalistesi_bean() {
}

}

islemler.xhtml sayfası

<f:view>
        <h:form id="hform">                
            <p:panel header="HASTA LİSTESİ"  >
                <p:panelGrid columns="4" >
                    <h:selectOneMenu   value="#{hastalistesi_bean.hastailcesi}">
                        <f:selectItem itemLabel="İlçe seçiniz" itemValue="0"/>
                        <f:selectItem itemLabel="NİLÜFER" itemValue="NİLÜFER"/>
                        <f:selectItem itemLabel="OSMANGAZİ" itemValue="OSMANGAZİ"/>
                        <f:selectItem itemLabel="YILDIRIM" itemValue="YILDIRIM"/>                                                             
                    </h:selectOneMenu>
                    <p:commandButton value="Filtrele" action="#{hastalistesi_bean.listele()}" update="dtaba"/>
                    <p:spacer/>
                    <p:commandButton value="Seçilen Kayıt Detayı" action="#{hastalistesi_bean.secilenveriyikaydet()}" update="out1,out2" onclick="PF('dhastadetaydlg').show();"/>
                </p:panelGrid>                    
                <p:separator/>                    
                <p:dataTable paginator="true" rows="10" selectionMode="single" selection="#{hastalistesi_bean.secilenkayit}" rowKey="#{hastadtable.hasta_id}"   value="#{hastalistesi_bean.veriler}" var="hastadtable" id="dtaba"   >
                    <p:column headerText="S_No" style="width: 50px">#{hastadtable.hasta_id}</p:column>                        
                    <p:column headerText="Adı Soyadı" style="width: 250px">#{hastadtable.hasta_adsoyad}</p:column>
                    <p:column headerText="Telefon No" style="width: 200px">#{hastadtable.hasta_telefon}</p:column>                
                    <p:column headerText="İlçe" style="width: 120px">#{hastadtable.hasta_ilce}</p:column>                                 
                </p:dataTable>   
<p:dialog id="dlg1" widgetVar="dhastadetaydlg">
                    <p:panelGrid columns="2">
                        <h:outputText value="Sıra No"/>                 
                        <h:outputText id="out1" value="#{hastalistesi_bean.secilenkayit.hasta_id}"/>           
                        <h:outputText value="AD SOYAD"/>
                        <h:outputText id="out2" value="#{hastalistesi_bean.secilenveriyiaktar.hasta_adsoyad}"/>                                 
                    </p:panelGrid>
                    <p:commandButton value="Hastayı Listeye Ekle" action="#{hastalistesi_bean.guncelle()}" update="dtaba"/>
                </p:dialog>

            </p:panel>
        </h:form>

    </f:view>

soruldu: 16 Mar '15, 05:56

JSF's gravatar image

JSF
0112
cevap kabul oranı: 0%

değiştirildi: 16 Mar '15, 06:01


Sessionscope kullanırken, "veriler" değişkenini temizledikten sonra yeni verileri listelersen eski bilgileri görmezsin.

public List<hastalistesi_pojo> listele() throws Exception {
     veriler = new ArrayList<hastalistesi_pojo>();
    .....
    ...
    ..
    .

Ayrıca her iki scope türünden de vazgeçip View Scope kullanmanı öneriririm.

Scope'lar arasındaki farklar.

permanent link

cevaplandı: 16 Mar '15, 06:03

SaRPaRDa's gravatar image

SaRPaRDa
5.0k213165
cevap kabul oranı: 27%

değiştirildi: 16 Mar '15, 06:06

Sayın SaRPaRDa, ilginiz ve cevabınız için teşekkür ederim. Tavsiyeniz üzere,

  1. View Scope kullandım
  2. Veriler listesini temizlediğim bir method (verilerlistesinitemizle()) yazdım ve Filtrele butonunun actionlistener özelliğine verilerlistesinitemizle() methodunu atadım.

Bu şekilde sorun çözüldü, umarım bilinçli bir yöntem olmuştur, eğer yanlışım varsa belirtirseniz memnun olurum. İlginize tekrar teşekkür ederim.

Aynı sorunu yaşayan olursa, yukarıda verdiğim kodlardaki bean sınıfına eklediğim method (verilerlistesinitemizle()) ve islemler.xhtml sayfasındaki Filtrele butonunun yeni durumu şöyle;

public void verilerlistesinitemizle() throws Exception{
    veriler.clear();
}

<p:commandButton value="Filtrele" action="#{hastalistesi_bean.listele()}" actionListener="#{hastalistesi_bean.verilerlistesinitemizle()}" update="dtable"/>

İkinci bir yöntem; Yeni bir method yazıp butonun actionListener özelliğine atamak yerine, bean sınıfındaki verilerin listelendiği "List<hastalistesi_pojo> listele()" methodunun ilk satırına veriler.clear() komutunu ekleyerek aynı sonuca ulaşabiliyoruz.

public List<hastalistesi_pojo> listele() throws Exception {
veriler.clear();
pg_con baglanti = new pg_con();
PreparedStatement pst_hastalistele = baglanti.dbbaglanti().prepareStatement("select * from hasta_tbl where h_ilce=?");
pst_hastalistele.setString(1, getHastailcesi());
ResultSet rs_hastalistele = pst_hastalistele.executeQuery();
while (rs_hastalistele.next()) {
    hastalistesi_pojo hl = new hastalistesi_pojo();
    hl.setHasta_id(rs_hastalistele.getInt("h_id"));
    hl.setHasta_tcno(rs_hastalistele.getString("h_tcno"));
    hl.setHasta_adsoyad(rs_hastalistele.getString("h_adsoyad"));
    hl.setHasta_adres(rs_hastalistele.getString("h_adres"));
    hl.setHasta_ilce(rs_hastalistele.getString("h_ilce"));
    hl.setHasta_telefon(rs_hastalistele.getString("h_telefon"));
    hl.setHasta_muakurum(rs_hastalistele.getString("h_muayenekurum"));
    veriler.add(hl);

}
baglanti.dbbaglanti().close();
pst_hastalistele.close();
rs_hastalistele.close();
return veriler;

}

permanent link

cevaplandı: 16 Mar '15, 08:06

JSF's gravatar image

JSF
0112
cevap kabul oranı: 0%

değiştirildi: 16 Mar '15, 09:11

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: 16 Mar '15, 05:56

Görüntüleme: 564 kez

Son güncelleme: 16 Mar '15, 09:11

powered by BitNami OSQA