JSF não retorna dados do banco

8 respostas
muniquewassem

Boa tarde gente,

Esses dias criei um tópico quase sobre esse assunto aqui e um rapaz me sugeriu usar anotações, então fui ler um pouco como elas funcionam, mas ainda não tá dando certo.

Agora consigo que a interface apareça certinho e até as linhas de quantos registros tem no banco, mas não aparece nada nessas linhas. Alguém sabe o que pode ser?

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.prime.com.tr/ui">
    <h:head>
        <title>Gerenciador de Livros</title>
        <link type="text/css" rel="stylesheet" href="dot-luv/skin.css"/>
    </h:head>
    <h:body>
        <p:layout fullPage="true">
            <p:layoutUnit position="center">
                <h1>Gerenciador de Estação</h1>
                <br/>
                <h:form prependId="false">
                    <p:dataTable id="tabela" var="estacao" value="#{estacaoController.listarEstacoes}">
                        <p:column>
                            <f:facet name="header">
                                <h:outputText value="Estacão"/>
                            </f:facet>
                            <h:outputText value="#{estacao.nome}" />
                        </p:column>
                        <p:column>
                            <f:facet name="header">
                                <h:outputText value="Horário"/>
                            </f:facet>
                            <h:outputText value="#{estacao.data}"/>
                        </p:column>
                        <p:column>
                            <f:facet name="header">
                                <h:outputText value="Pressão"/>
                            </f:facet>
                            <h:outputText value="#{estacao.pressao}"/>
                        </p:column>
                        <p:column>
                            <f:facet name="header">
                                <h:outputText value="Temperatura"/>
                            </f:facet>
                            <h:outputText value="#{estacao.temperatura}"/>
                        </p:column>
                    </p:dataTable>
                </h:form>
            </p:layoutUnit>
        </p:layout>

    </h:body>
</html>
package Controller;

import Model.Estacao;
import Dao.EstacaoDao;
import java.sql.SQLException;
import javax.faces.model.DataModel;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

/**
 *
 * @author Munique
 */

@ManagedBean
@SessionScoped
public class EstacaoController {
    
    private Estacao estacao;
    private DataModel listaEstacoes;

    public DataModel getListarEstacoes() throws SQLException {
        List<Estacao> lista = new EstacaoDao().listaEstacao();
        //List<Estacao> lista = new Dao.EstacaoDao().listaEstacao();
        listaEstacoes = new ListDataModel(lista);
        return listaEstacoes;
    }
}
package Dao;

import Model.Estacao;
import Utils.ConexaoBanco;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
/**
 *
 * @author Munique
 */
public class EstacaoDao {

    public List<Estacao> listaEstacao() throws SQLException {
        List<Estacao> estacoes = new ArrayList<Estacao>();

        String select = "SELECT codigoestacao, descestacao, horario, pressao, temperatura FROM estacao;";

        PreparedStatement stmt = ConexaoBanco.getConnection().prepareStatement(select);
        ResultSet rs = stmt.executeQuery();

        while (rs.next()) {
            Estacao estacao = new Estacao();
            estacao.setCodigo(rs.getInt("codigoestacao"));
            estacao.setNome(rs.getString("descestacao"));
            estacao.setData(rs.getString("horario"));
            estacao.setTemperatura(rs.getString("pressao"));
            estacao.setPressao(rs.getString("temperatura"));
            estacoes.add(estacao);
        }

        rs.close();
        stmt.close();

        return estacoes;
    }
}
package Utils;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
 *
 * @author Munique
 */

public class ConexaoBanco {

    private static final String url = "jdbc:postgresql://localhost:5432/BDEstacao";
    private static final String driver = "org.postgresql.Driver";
    private static final String user = "postgres";
    private static final String pswd = "postgre";    

    public static Connection getConnection() {
        try {
            Class.forName(driver);
            return DriverManager.getConnection(url, user, pswd);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
        return null;
    }
}
package Model;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;


/**
 *
 * @author Munique
 */

@ManagedBean
@SessionScoped
public class Estacao {

        private int codigo;
    private String data;
    private String nomeEstacao;
    private String temperatura;
    private String pressao;
    
    public Estacao() {
    }

    public int getCodigo() {
        return codigo;
    }

    public void setCodigo(int codigo) {
        this.codigo = codigo;
    }

    public String getNome() {
        return nomeEstacao;
    }

    public void setNome(String nome) {
        this.nomeEstacao = nome;
    }
    
    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }
    
    public String getTemperatura() {
        return temperatura;
    }

    public void setTemperatura(String temperatura) {
        this.temperatura = temperatura;
    }
    
    public String getPressao() {
        return pressao;
    }

    public void setPressao(String pressao) {
        this.pressao = pressao;
    }
}

Não entendo porque não aparece nada escrito na tabela.

8 Respostas

A

tenta fazer assim

@ManagedBean  
@SessionScoped  
public class EstacaoController {  
      
    private Estacao estacao;
  
    public List<Estacao> getListarEstacoes() throws SQLException {  
        return new EstacaoDao().listaEstacao();  
    }  
}

e ve se funciona.

t+

muniquewassem

Não, não seu certo.

Eu não faço idéia do que tá errado.

A

estranho,

faz um debug ai e ve se ta entrando no metado, se sua consulta ta retornando valores, pq eu tenho um projeto aqui e funciona perfeito.

T+

muniquewassem

Passei e vi um aviso, ai fui ver toda saída e:

AVISO: JSF1063: AVISO! Definindo valor de atributo não serializável em HttpSession (chave: estacaoController, classe do valor: Controller.EstacaoController).
AVISO: JSF1063: AVISO! Definindo valor de atributo não serializável em HttpSession (chave: estacao, classe do valor: Model.Estacao).
INFO: Inicializando Mojarra 2.1.0 (FCS 2.1.0-b11) para o contexto ‘/AplBanco’
GRAVE: Unable to load annotated class: Controller.LivroController
GRAVE: java.lang.ClassNotFoundException: Controller.LivroController

Será que tem algo a ver com isso? Fui dar uma olhada em outro projeto que me passaram, mas dá um erro semelhante e funciona.

A

isso aconteceu, pq qdo vc gerou o .war ou .ear, essa classe não foi empacotada. da um clean no seu projeto e tente novamente, q deve funcionar.

muniquewassem

Já limpei, construi e executei uma 10 vezes, mas nada ainda.

Agora to tentando executar com o Tomcat, mas continua na mesma: aparece a tela, com as linhas da tabela e tudo mais, mas não aparecem os dados.

A saída que tenho é a seguinte:
Using CATALINA_BASE: “C:\Users\Munique\Downloads\apache-tomcat-6.0.33”
Using CATALINA_HOME: “C:\Users\Munique\Downloads\apache-tomcat-6.0.33”
Using CATALINA_TMPDIR: “C:\Users\Munique\Downloads\apache-tomcat-6.0.33\temp”
Using JRE_HOME: “C:\Program Files\Java\jdk1.6.0_25”
Using CLASSPATH: “C:\Users\Munique\Downloads\apache-tomcat-6.0.33\bin\bootstrap.jar”
09/10/2011 22:38:39 org.apache.catalina.core.AprLifecycleListener init
INFO: Loaded APR based Apache Tomcat Native library 1.1.20.
09/10/2011 22:38:39 org.apache.catalina.core.AprLifecycleListener init
INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
09/10/2011 22:38:40 org.apache.coyote.http11.Http11AprProtocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
09/10/2011 22:38:40 org.apache.coyote.ajp.AjpAprProtocol init
INFO: Initializing Coyote AJP/1.3 on ajp-8009
09/10/2011 22:38:40 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 1983 ms
09/10/2011 22:38:40 org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
09/10/2011 22:38:40 org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.33
09/10/2011 22:38:40 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory docs
09/10/2011 22:38:40 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory examples
09/10/2011 22:38:41 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory host-manager
09/10/2011 22:38:41 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory manager
09/10/2011 22:38:41 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory ROOT
09/10/2011 22:38:41 org.apache.coyote.http11.Http11AprProtocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
09/10/2011 22:38:41 org.apache.coyote.ajp.AjpAprProtocol start
INFO: Starting Coyote AJP/1.3 on ajp-8009
09/10/2011 22:38:41 org.apache.catalina.startup.Catalina start
INFO: Server startup in 1416 ms
09/10/2011 22:38:42 org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Deploying configuration descriptor AplTC.xml
09/10/2011 22:38:43 com.sun.faces.config.ConfigureListener contextInitialized
INFO: Inicializando Mojarra 2.0.4 (FCS b09) para o contexto ‘/AplTC’
09/10/2011 22:38:48 org.apache.catalina.core.StandardContext start
INFO: Container org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/AplTC] has already been started
09/10/2011 22:38:51 org.primefaces.renderkit.HeadRenderer encodeBegin
INFO: primefaces.skin is deprecated, use primefaces.THEME instead.
09/10/2011 22:38:53 com.sun.faces.context.SessionMap put
AVISO: JSF1063: AVISO! Definindo valor de atributo não serializável em HttpSession (chave: estacaoController, classe do valor: Controller.EstacaoController).
09/10/2011 22:38:53 com.sun.faces.context.SessionMap put
AVISO: JSF1063: AVISO! Definindo valor de atributo não serializável em HttpSession (chave: estacao, classe do valor: Model.Estacao).
09/10/2011 22:49:25 org.apache.catalina.core.StandardContext reload
INFO: Reloading Context with name [/AplTC] has started
09/10/2011 22:49:26 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
GRAVE: The web application [/AplTC] registered the JDBC driver [org.postgresql.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
09/10/2011 22:49:26 org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap
GRAVE: The web application [/AplTC] created a ThreadLocal with key of type [com.sun.faces.util.Util$1] (value [com.sun.faces.util.Util$1@54be8c3e]) and a value of type [java.util.HashMap] (value [{com.sun.faces.patternCache={ = }}]) but failed to remove it when the web application was stopped. This is very likely to create a memory leak.
09/10/2011 22:49:30 com.sun.faces.config.ConfigureListener contextInitialized
INFO: Inicializando Mojarra 2.0.4 (FCS b09) para o contexto ‘/AplTC’
09/10/2011 22:49:34 org.apache.catalina.core.StandardContext reload
INFO: Reloading Context with name [/AplTC] has started
09/10/2011 22:49:34 org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap
GRAVE: The web application [/AplTC] created a ThreadLocal with key of type [com.sun.faces.util.Util$1] (value [com.sun.faces.util.Util$1@7336193e]) and a value of type [java.util.HashMap] (value [{com.sun.faces.patternCache={ = }}]) but failed to remove it when the web application was stopped. This is very likely to create a memory leak.
09/10/2011 22:49:35 com.sun.faces.config.ConfigureListener contextInitialized
INFO: Inicializando Mojarra 2.0.4 (FCS b09) para o contexto ‘/AplTC’
09/10/2011 22:49:38 org.primefaces.renderkit.HeadRenderer encodeBegin
INFO: primefaces.skin is deprecated, use primefaces.THEME instead.
09/10/2011 22:49:40 com.sun.faces.context.SessionMap put
AVISO: JSF1063: AVISO! Definindo valor de atributo não serializável em HttpSession (chave: estacaoController, classe do valor: Controller.EstacaoController).
09/10/2011 22:49:40 com.sun.faces.context.SessionMap put
AVISO: JSF1063: AVISO! Definindo valor de atributo não serializável em HttpSession (chave: estacao, classe do valor: Model.Estacao).
09/10/2011 22:50:16 org.primefaces.renderkit.HeadRenderer encodeBegin
INFO: primefaces.skin is deprecated, use primefaces.THEME instead.
09/10/2011 22:50:28 org.primefaces.renderkit.HeadRenderer encodeBegin
INFO: primefaces.skin is deprecated, use primefaces.THEME instead.

A

Ola,

Uma boa prática é não usar o método de recuperar dados do banco diretamente no get da classe. Dentro do ciclo de vida do JSF, esse método vai ser chamado várias vezes. Utiliza o @PostConstruct.

No lugar de DataModel usa um List mesmo do objeto em questão:

import javax.annotation.PostConstruct;

private List<Estacao> listaEstacoes;  

@PostConstruct
public void init(){
     listaEstacoes= new EstacaoDao().listaEstacao();  
}
muniquewassem

Ahn, ainda não conheço essa função, mas irei dar uma olhada. Eu testei com ela aqui, mas ainda não aparecem meus dados, não sei mais o que fazer.

Criado 8 de outubro de 2011
Ultima resposta 10 de out. de 2011
Respostas 8
Participantes 3