JSF, DAO problem z wyświetleniem danych

0

Witam mam tak napisany kod i nie wiem dlaczego zwraca mi java.lang.NullPointerException.

package sql;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */


import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.SQLException;
//import com.mysql.jdbc.Driver;

/**
 *
 * @author Bartłomiej
 */
public class DBConnection
{

    final static String URL = "jdbc:mysql://*******/bwasik_biblioteka";
    final static String USER = "*****";
    final static String PASSWORD = ********;
    private static Connection polaczenie;

    public static Connection getConnection()
    {
        try
        {

            Class.forName("com.mysql.jdbc.Driver");

            if (polaczenie == null || polaczenie.isClosed())
            {
                polaczenie = DriverManager.getConnection(URL, USER, PASSWORD);
            }

        }
        catch (ClassNotFoundException e)
        {

            System.err.println("METHOD: getConnection ERROR :not find driver");

        }
        catch (SQLException e)
        {

            System.err.println("METHOD: getConnection ERROR: " + e.getMessage());

        }
        finally
        {

            return polaczenie;

        }

    }

    public static void closeConnection()
    {
        try
        {
            if(polaczenie!=null)
            {
            polaczenie.close();
            }
        }
        catch (SQLException e)
        {
            System.err.println("METHOD : closeConnection ERROR: " + e.getMessage());
        }
    }
}
 
 /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ziarna;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlRootElement;

/**
 *
 * @author Bartłomiej
 */
@Entity
@Table(name = "Uzytkownik")
@XmlRootElement
@NamedQueries(
{
    @NamedQuery(name = "Uzytkownik.findAll", query = "SELECT u FROM Uzytkownik u"),
    @NamedQuery(name = "Uzytkownik.findByIdUzytkownik", query = "SELECT u FROM Uzytkownik u WHERE u.idUzytkownik = :idUzytkownik"),
    @NamedQuery(name = "Uzytkownik.findByHaslo", query = "SELECT u FROM Uzytkownik u WHERE u.haslo = :haslo"),
    @NamedQuery(name = "Uzytkownik.findByStatus", query = "SELECT u FROM Uzytkownik u WHERE u.status = :status")
})
public class Uzytkownik implements Serializable
{
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "idUzytkownik")
    private Integer idUzytkownik;
    @Basic(optional = false)
    @Column(name = "Haslo")
    private String haslo;
    @Basic(optional = false)
    @Column(name = "status")
    private short status;

    public Uzytkownik()
    {
    }

    public Uzytkownik(Integer idUzytkownik)
    {
        this.idUzytkownik = idUzytkownik;
    }

    public Uzytkownik(Integer idUzytkownik, String haslo, short status)
    {
        this.idUzytkownik = idUzytkownik;
        this.haslo = haslo;
        this.status = status;
    }

    public Integer getIdUzytkownik()
    {
        return idUzytkownik;
    }

    public void setIdUzytkownik(Integer idUzytkownik)
    {
        this.idUzytkownik = idUzytkownik;
    }

    public String getHaslo()
    {
        return haslo;
    }

    public void setHaslo(String haslo)
    {
        this.haslo = haslo;
    }

    public short getStatus()
    {
        return status;
    }

    public void setStatus(short status)
    {
        this.status = status;
    }

    @Override
    public int hashCode()
    {
        int hash = 0;
        hash += (idUzytkownik != null ? idUzytkownik.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object)
    {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Uzytkownik))
        {
            return false;
        }
        Uzytkownik other = (Uzytkownik) object;
        if ((this.idUzytkownik == null && other.idUzytkownik != null) || (this.idUzytkownik != null && !this.idUzytkownik.equals(other.idUzytkownik)))
        {
            return false;
        }
        return true;
    }

    @Override
    public String toString()
    {
        return "ziarna.Uzytkownik[ idUzytkownik=" + idUzytkownik + " ]";
    }
}
 /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ziarna;

import sql.DBConnection;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Collection;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

/**
 *
 * @author Bartłomiej
 */
@ManagedBean
@RequestScoped
public class UzytkownikDAO
{

    /**
     * Creates a new instance of UzytkownikDAO
     */
    private Collection<Uzytkownik> uzytkownicy;

    public UzytkownikDAO()
    {
    }

    public Collection<Uzytkownik> getUzytkownicy()
    {

        try
        {

            Connection polaczenie = DBConnection.getConnection();
            ResultSet rs = polaczenie.createStatement().executeQuery("select * from Uzytkownik");
            while (rs.next())
            {
                Uzytkownik uzytkownik = new Uzytkownik();
                uzytkownik.setIdUzytkownik(rs.getInt("idUzytkownik"));
                uzytkownik.setHaslo(rs.getString("Haslo"));


            }
            polaczenie.close();
        }
        catch (SQLException e)
        {
            System.err.println("METHOD: getUzytkownik ERROR: " + e.getMessage());
        }
        
        return uzytkownicy;
    }

    public void setUzytkownicy(Collection<Uzytkownik> uzytkownicy)
    {
        this.uzytkownicy = uzytkownicy;
    }
}

faces-config.xml

<?xml version='1.0' encoding='UTF-8'?>

<!-- =========== FULL CONFIGURATION FILE ================================== -->

<faces-config version="2.1"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_1.xsd">

<managed-bean>
        <menaged-bean-name>UzytkownikDAO</menaged-bean-name>
        <managed-bean-class>ziarna.UzytkownikDAO</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>
</faces-config>

index.html

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <table>
            <tr>
                <th>Imie</th>
            </tr>       
            <ui:repeat value="#{uzytkownikDAO.uzytkownicy}" var="ksiazka">
                <tr>                 
                    <td>1</td>                 
                </tr>
                
            </ui:repeat>
        </table>
    </h:body>
</html>
2

GDZIE rzuca ci nullpointerem? Tak trudno to napisać? Musze czytac cały kod? żal.pl
Błąd masz w klasie UzytkownikDAO:

  1. NIGDZIE nie tworzysz kolekcji "uzytkownicy". Masz ją tylko zdeklarowaną
  2. NIGDZIE nie dodajesz użytkowników których wyciągasz z bazy do tej kolekcji a mimo to ją zwracasz
    Co powinieneś zrobić? Wywalić to pole klasy, kolekcje tworzysz wewnątrz metody i dodawać do tej kolekcji userów wyciąganych z bazy.
0

Przepraszam Shalom za problem . Pomogło mi to z java.lang.NullPointerException. Trochę bałaganu w kodzie zrobiłem bo nie wiem dlaczego nie chce mi wyświetlić tyle jedynek ile jest obiektów w kolekcji . Ani jednej mi nie wyświetla czyli przekazuje mi pustą listę . Próbowałem deklarować , pobierać w różnych miejscach bez skutku .

Kod po poprawce

 /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ziarna;

import sql.DBConnection;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

/**
 *
 * @author Bartłomiej
 */
@ManagedBean
@RequestScoped
public class UzytkownikDAO
{

    /**
     * Creates a new instance of UzytkownikDAO
     */
    private Collection<Uzytkownik> uzytkownicy;

    public UzytkownikDAO()
    {
        uzytkownicy=new ArrayList<Uzytkownik>();
        Uzytkownik uzytkownik = new Uzytkownik();
        uzytkownik.setIdUzytkownik(444);
        uzytkownicy.add(uzytkownik);
    }

    public Collection<Uzytkownik> getUzytkownicy()
    {
        uzytkownicy = new ArrayList<Uzytkownik>();
        try
        {

            Connection polaczenie = DBConnection.getConnection();
            ResultSet rs = polaczenie.createStatement().executeQuery("select * from Uzytkownik");
            while (rs.next())
            {
                Uzytkownik uzytkownik = new Uzytkownik();
                uzytkownik.setIdUzytkownik(rs.getInt("idUzytkownik"));
                uzytkownik.setHaslo(rs.getString("Haslo"));
                uzytkownicy.add(uzytkownik);


            }
            polaczenie.close();
        }
        catch (SQLException e)
        {
            System.err.println("METHOD: getUzytkownik ERROR: " + e.getMessage());
        }

        return uzytkownicy;
    }

    public void setUzytkownicy(Collection<Uzytkownik> uzytkownicy)
    {
        this.uzytkownicy = uzytkownicy;
    }
}

index.xhtml

 
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <table>
            <tr>
                <th>Imie</th>
            </tr>       
            <ui:repeat value="#{UzytkownikDAO.uzytkownicy}" var="ksiazka">
                <tr>                 
                    <td>#{ksiazka.idUzytkownika}</td>                 
                </tr>
                
            </ui:repeat>
        </table>
    </h:body>
</html>
0

Nie bardzo rozumiem gdzie masz problem. Zapnij się debugerem w tym getUzytkownicy jak normalny człowiek i zobacz co się dzieje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1