JSF + Primefaces + JDBC kullanarak geliştirdiğim uygulamada Primefaces Datatable veri eklerken son eklenen veriyi ezip ekleme işlemini gerçekleştiriyor ama sayfayı Refresh ettiğimde veri normal şekilde eklenmiş oluyor uzun zamandır nerede yanlış yaptığımı bulamadım yardımcı olan arkadaşlara şimdiden teşekkür ederim ..

Viewde kullandığım kod;

<p:commandButton value="Ekle" icon="ui-icon-disk" actionListener="#{facultyBean.setFacultyData()}" update=":list:faculties"/>

soruldu: 31 Ağu '14, 20:31

Heval%20Berk%20Nevruz's gravatar image

Heval Berk Nevruz
2.0k122440
cevap kabul oranı: 20%

değiştirildi: 31 Ağu '14, 20:39


Senin kodlarını biraz değiştirdim. Ben debug edemiyorum. faculty'i controller'dan almak yerine dao'ya değişken olarak gönderdim.

Bir incele istersen;

Faculty Bean:

   @ManagedBean
    @ViewScoped
    public class FacultyBean {
        FacultyController controller = new FacultyController(new FacultyDAOImpl());
        List<Faculty> facultyDataList = controller.getFacultyDataList();
        private Faculty faculty = new Faculty();

        public Faculty getFaculty() {
            return faculty;
        }

        public List<Faculty> getFacultyDataList() {
            return facultyDataList;
        }

        public void setFacultyData() {
            controller.setFacultyData(faculty);
            facultyDataList.add(faculty);
            faculty = new Faculty();
            //facultyDataList = controller.getFacultyDataList();
        }

public FacultyController getController() {
        return controller;
    }

    public void setController(FacultyController controller) {
        this.controller = controller;
    }

    public void setFacultyDataList(List<Faculty> facultyDataList) {
        this.facultyDataList = facultyDataList;
    }

    public Faculty getFaculty() {
        return faculty;
    }

    public void setFaculty(Faculty faculty) {
        this.faculty = faculty;
    }
    }

FacultyController:

public class FacultyController {
    private DAO dao;

    public FacultyController(DAO dao) {
        this.dao = dao;
    }

    public DAO getDao() {
        return dao;
    }

    public void setDao(DAO dao) {
        this.dao = dao;
    }

    public List<Faculty> getFacultyDataList() {
        return dao.getFacultyDataList();
    }

    public void setFacultyData(Faculty faculty) {
        dao.setFacultyData(faculty);
    }

DAO:

public interface DAO {
    List<Faculty> getFacultyDataList();
    void setFacultyData(Faculty faculty);
}

FacultyDAOImpl:

public class FacultyDAOImpl implements DAO {

    @Override
    public List<Faculty> getFacultyDataList() {
        ArrayList<Faculty> facultyDataList = new ArrayList<Faculty>();
        try (Connection con = ConnectionClass.getConnection();
                PreparedStatement ps = con
                        .prepareStatement("select faculty_no,faculty_name"
                                + " from faculty")) {
            try (ResultSet result = ps.executeQuery()) {
                while (result.next()) {
                    Faculty faculty = new Faculty();
                    faculty.setFacultyNo(result.getInt(1));
                    faculty.setFacultyName(result.getString(2));
                    facultyDataList.add(faculty);
                }
            }
        } catch (SQLException e) {
            FacesContext.getCurrentInstance().addMessage(
                    null,
                    new FacesMessage(FacesMessage.SEVERITY_WARN,
                            "Database Error",
                            "Databasedeki Verilere eri�ilemiyor"));
        }
        return facultyDataList;
    }

    @Override
    public void setFacultyData(Faculty faculty) {
        try (Connection con = ConnectionClass.getConnection();
                PreparedStatement ps = con
                        .prepareStatement("insert into faculty"
                                + "(faculty_no,faculty_name) values" + "(?,?)")) {
            ps.setInt(1, faculty.getFacultyNo());
            ps.setString(2, faculty.getFacultyName());
            ps.executeUpdate();
        } catch (SQLException e) {
            FacesContext.getCurrentInstance().addMessage(
                    null,
                    new FacesMessage(FacesMessage.SEVERITY_WARN,
                            "Database Error",
                            "Veri Eklenirken Bir Sorun Olu�tu"));
        }
    }
permanent link

cevaplandı: 02 Eyl '14, 09:14

SaRPaRDa's gravatar image

SaRPaRDa
5.0k213165
cevap kabul oranı: 27%

evet hocam sorun çözüldü yardımlarınız için çok teşekkür ederim

(02 Eyl '14, 18:53) Heval Berk Nevruz Heval%20Berk%20Nevruz's gravatar image

Datatable'in rowKey özelliğini incele. Yeni eklenen veri ya id almıyordur veya eziyor dediğin kayıtın id nosu ile aynı id numarasını kullanıyordur.

permanent link

cevaplandı: 01 Eyl '14, 06:32

SaRPaRDa's gravatar image

SaRPaRDa
5.0k213165
cevap kabul oranı: 27%

Hocam Id numaraları aynı ise database veri ekleme işleminde kullanıcıya mesaj veriyorum ve ekleme işlemi gerçekleşmiyor ancak buradada bir sorun var database veri eklenmedıgı halde tabloya diger veriyi ezerek ekliyor ama sayfayı refresh edince düzeliyor anlamadığım datatable veriyi databaseden çekiyorum .. Database eklemedıgı halde tabloya nasıl veri ekliyor ama refresh işleminden sonra eklenmeyen veri gidiyor sorun düzeliyor

(01 Eyl '14, 06:45) Heval Berk Nevruz Heval%20Berk%20Nevruz's gravatar image

facultyBean.setFacultyData() ve datatable'ın kodlarını paylaşırmısın.

(01 Eyl '14, 07:02) SaRPaRDa SaRPaRDa's gravatar image

DataTable Kodları

<p:panel id="panel" header="Fakülte Listesi">   
<p:dataTable id="faculties" value="#{facultyBean.facultyDataList}" sortBy="#{c.facultyNo}" var="c" paginator="true" rows="10">
<p:column>     
     <f:facet name="header">
        <h:outputText value="Fakülte No" />     
     </f:facet>              
    <h:outputText value="#{c.facultyNo}"/>    
</p:column>    
 <p:column>     
    <f:facet name="header">    
        <h:outputText value="Fakülte Adı" />  
    </f:facet>   
    <h:outputText value="#{c.facultyName}" />    
 </p:column>  
 <p:column>
    <f:facet name="header">
        <h:outputText value="İşlem" />
    </f:facet>
    <p:commandLink value="Update" actionListener="#{facultyBean.updateFacultyData()}" styleClass="updel"/>
    <p:commandLink value="Delete" actionListener="#{facultyBean.deleteFacultyData()}" styleClass="updel"/>
 </p:column>
  </p:dataTable>

Fonksiyonun Kodları

@Override
public void setFacultyData() {
    try (Connection con = ConnectionClass.getConnection();
            PreparedStatement ps = con
                    .prepareStatement("insert into faculty"
                            + "(faculty_no,faculty_name) values" + "(?,?)")) {
        ps.setInt(1, getFaculty().getFacultyNo());
        ps.setString(2, getFaculty().getFacultyName());
        ps.executeUpdate();
    } catch (SQLException e) {
        FacesContext.getCurrentInstance().addMessage(
                null,
                new FacesMessage(FacesMessage.SEVERITY_WARN,
                        "Database Error",
                        "Veri Eklenirken Bir Sorun Oluştu"));
    }
}
(01 Eyl '14, 07:15) Heval Berk Nevruz Heval%20Berk%20Nevruz's gravatar image

commandbutton'da :list:faculties isimli paneli update ediyorsun ama fakülte listesini taşıyan panelim id'si "panel". Panelin idsini değiştirip dener misin?

<p:panel id="faculties" header="Fakülte Listesi">

(01 Eyl '14, 07:20) SaRPaRDa SaRPaRDa's gravatar image

olmadı hocam aynı sorun devam ediyor ..

(01 Eyl '14, 08:21) Heval Berk Nevruz Heval%20Berk%20Nevruz's gravatar image

verdiğin bilgi ve kodlarla ancak bunları tahmin edebiliyorum. setFacultyData prosedüründe veritabanına kayıt etmişsin ama nerede verileri çağırıyor veya datatable listesine (facultyDataList) ekliyorsun bilmiyorum.

Hata ile alakası varmı bilmiyorum ama sortBy="#{c.facultyNo}" primefaces'in yeni versiyonlarında değişti. sort işlemi column tanımında yapılıyor artık.

Datatable'ın tanımındaki sort kodunu sil ve column tanımına ekle.

(01 Eyl '14, 08:36) SaRPaRDa SaRPaRDa's gravatar image

<p:column sortby="#{c.facultyNo}">
<f:facet name="header"> <h:outputtext value="Fakülte No"/>
</f:facet>
<h:outputtext value="#{c.facultyNo}"/>
</p:column>

(01 Eyl '14, 08:36) SaRPaRDa SaRPaRDa's gravatar image

yok hocam değişen bişey olmadı ..

(01 Eyl '14, 08:55) Heval Berk Nevruz Heval%20Berk%20Nevruz's gravatar image

Söylediğim gibi ya update ile ilgili bir sorunun var yada kaydettiğin bilgiyi, datatable'ın kullandığı listeye eklemekle ilgili.

(01 Eyl '14, 10:46) SaRPaRDa SaRPaRDa's gravatar image

Aylardır arastırmadıgım şey kalmadı anlam veremedim bu soruna olmadı olmayacakta bu gidişle

(01 Eyl '14, 14:00) Heval Berk Nevruz Heval%20Berk%20Nevruz's gravatar image

O halde fakülte kaydı ile ilgili kodların tamamını paylaş. Sorunu çözmeye çalışalım.

(01 Eyl '14, 18:13) SaRPaRDa SaRPaRDa's gravatar image

https://github.com/HevalBerkNevruz/JsfSummerProject

burada kodlar var hocam daha önceki bir sorundada siz yardımcı olmuştunuz .. DAO İmplementasyonunda yanlış yaptığım yerler var bu sorun yüzünden daha oraları düzeltmedim ama ondan olmaz diye düşünüyorum

(01 Eyl '14, 19:04) Heval Berk Nevruz Heval%20Berk%20Nevruz's gravatar image
1

setFacultyData prosedüründe yeni fakülteyi veritabanına ekliyorsun ama datatable'ın okuduğu facultyDataList'e yeni veriyi eklemiyorsun.

Bean içerisindeki setFacultyData'da bu işlemi yapabilirsin.

public void setFacultyData() {
     controller.setFacultyData();
     facultyDataList.add(faculty);
     //facultyDataList = controller.getFacultyDataList();
}

commandButton'un update'inde fakülte listesini taşıyan paneli güncelle.

<p:commandButton value="Ekle" style="position:relative; left:220px;" icon="ui-icon-disk" 
actionListener="#{facultyBean.setFacultyData()}" update="message :list:pnlFacultyList"/>

Panele id no olarak pnlFacultyList ver.

<p:panel id="pnlFacultyList" header="Fakülte Listesi">   
<p:dataTable value="#{facultyBean.facultyDataList}" ......
....

Eğer veritabanına kayır işleminde sorun olmazsa bu değişiklikleri yaptığında sorun çıkarmayacaktır.

Ayrıca,

  1. Tüm jsf sayfalarında menü <head> <body> var. Bu kod kalabalığı hataları yakalamanı zorlaştırır. JSF template'leri kullanmak çok kolay. Bir template sayfasına bahsettiğim kodları eklersin, diğer jsf sayfaların sadece kendisine ait kodları barındırır.
  2. DAO ve Service imlementasyonlarında interface kullanmanı öneririm. Interface kullanımı ile ilgili sitede epeyce soru soruldu.
  3. Hibernate/JPA'yı projene implemente etmeni öneririm. Bu konuda da sitede yeterince bilgi var.
(02 Eyl '14, 03:11) SaRPaRDa SaRPaRDa's gravatar image

DAO Implementasyonlarında zaten interface kullanıyorum hocam kasdettiğiniz şeyi tam olarak anlamadım .. Projedede Hibernate kullanacam zaten sağolun önerileriniz için :)

Sorunda çözülmedi hocam .. şuandada veriyi eziyor ama aynı zamanda ezdiği veriden sonra yeni veriyide ekliyor .. Sanırım dikkat etmediniz DBden veriyi çekerken zaten facultyDataListe çekiyorum yani tekrardan veriyi eklememe gerek olmaması lazım .

(02 Eyl '14, 07:54) Heval Berk Nevruz Heval%20Berk%20Nevruz's gravatar image

FaculyBean ilk oluşurken facultyDataList'i dolduruyorsun. Yeni kayıt veritabanına eklendikten sonra nerede fakultyDataList'e ekleniyor?

(02 Eyl '14, 08:34) SaRPaRDa SaRPaRDa's gravatar image

DBden veriyi çekerken getFacultyDataList() fonksiyonunda Liste çekiyorum onuda DataTableda görüntülüyorum tekrardan Liste eklememe gerek var mı ki

(02 Eyl '14, 08:58) Heval Berk Nevruz Heval%20Berk%20Nevruz's gravatar image

SessionScope kullanıyorsun. Liste ilk açılışta doldu. Yeni kaydı nereden bilecekki? Ya yeni eklenen kaydı listeye ekleyeceksin yada tüm bilgileri veritabanından tekrar çekeceksin.

(02 Eyl '14, 09:03) SaRPaRDa SaRPaRDa's gravatar image

Eziyor dediğin konu da faculty değişkeninin controller'dan çağrılmasından kaynaklanıyor olabilir. Ben debug yapamadığımdan sen debug yaparak görebilirsin.

.xhtml dosyanın kullandığı faculty değişkenini Bean içerisinde:

private Faculty faculty = new Faculty();

şeklinde tanımla. bu değişkeni setFacultyData()'ya gönder.

İstersen SessionScoped yerine ViewScoped kullan.

(02 Eyl '14, 09:05) SaRPaRDa SaRPaRDa's gravatar image
18 yorumdan 5 tanesi gösteriliyor hepsini göster
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,077
×281
×97
×41

Soruldu: 31 Ağu '14, 20:31

Görüntüleme: 840 kez

Son güncelleme: 02 Eyl '14, 18:53

powered by BitNami OSQA