Problema para carregar Primefaces datatable com conteúdo de tabela MySQL

11 respostas
jsfjavamysql
C

Estou tentando carregar um datatable do primefaces com uma tabela do MySQL mas não está carregando, não recebo nenhum erro.
Desde já agradeço qualquer ajuda.
Entity:

package itc.systems.entity;

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

/**
 *
 * @author Cezar Apulchro
 */
@Entity
@Table(name = "tabela_especialidades_medica")
public class Especialidades implements Serializable {

    private static final long serialVersionUID = 1L;
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    @Column
    private String especialidade;   
    
    public Especialidades() {
    	
    }
    
    public Especialidades(String especialidade) {
    	
    	this.especialidade = especialidade;
    }
    

    public String getEspecialidade() {
        return especialidade;
    }

    public void setEspecialidade(String especialidade) {
        this.especialidade = especialidade;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @Override
    public int hashCode() {
        int hash = 5;
        hash = 97 * hash + this.id;
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Especialidades other = (Especialidades) obj;
        return this.id == other.id;
    }

    
    @Override
    public String toString() {
        return "itc.systems.entity.Especialidades[ id=" + id + " ]";
    }
    
}

Controller:

package itc.systems.controller;

import itc.systems.beans.LstEspecialidades;
import itc.systems.entity.Especialidades;
import java.io.Serializable;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;

/**
 *
 * @author Cezar Apulchro
 */
@Named(value = "espcont")
@ViewScoped
public class EspecialidadesController implements Serializable {

    private static final long serialVersionUID = 1L;
    
    private List<Especialidades> especialidades;
    
    @Inject
    private LstEspecialidades service;
    
    @PostConstruct
    public void init() {
        
        this.especialidades = service.getEspecialidade();
        
        }
    
    public List<Especialidades> getEspecialidades() {
        return especialidades;
    }

    public void setEspecialidades(List<Especialidades> especialidades) {
        this.especialidades = especialidades;
    }

    public LstEspecialidades getService() {
        return service;
    }

    public void setService(LstEspecialidades service) {
        this.service = service;
    }
    
}

EntityManager:

package itc.systems.beans;

import itc.systems.controller.JpaUtil;
import itc.systems.entity.Especialidades;
import java.io.Serializable;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

/**
 *
 * @author Cezar Apulchro
 */
@Stateless
public class LstEspecialidades implements Serializable {

    private static final long serialVersionUID = 1L;
    
    @PersistenceContext
    public List<Especialidades> getEspecialidade() {
        
        EntityManager manager = JpaUtil.getEntityManager();
        Query query = manager.createQuery("select e from Especialidades e", Especialidades.class);
        
        List<Especialidades> especialidades = query.getResultList();
        
        manager.close();
        JpaUtil.close();
        
        return especialidades;
    }
    
}

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:ui="http://java.sun.com/jsf/facelets"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        
        <h:form id="form">
            
            <p:dataTable id="tbl" var="esp" value="#{espcont.especialidades}">
                <p:column>
                    <f:facet name="Nome">Especialidade</f:facet>
                    <h:outputText value="#{esp.especialidade}"></h:outputText>
                </p:column>
            </p:dataTable>
    	
        </h:form>
    </h:body>
</html>

11 Respostas

E

Você tentou depurar para ver se seus métodos estão sendo chamados?

C

Olá edpickler, não tentei ainda, alterei a versão do primefaces de 10.0.0 para 8.0 e agora tenho a mensagem de “No records found.”.

E

Tens que fazer para ver se seus métodos estão sendo chamados e se está tudo indo conforme você espera.

C

O debug está executando os métodos que marquei como breackpoint mas não mostra nada.

C
Attaching to tomcat_shared_memory_id
User program running
MethodBreakpoint [itc.systems.controller.EspecialidadesController].init successfully submitted.
LineBreakpoint EspecialidadesController.java : 35 successfully submitted.
LineBreakpoint LstEspecialidades.java : 29 successfully submitted.
LineBreakpoint EspecialidadesController.java : 33 successfully submitted.
MethodBreakpoint [itc.systems.controller.EspecialidadesController].init '()' successfully submitted.
LineBreakpoint EspecialidadesController.java : 33 successfully submitted.
E

1 - Quando você depura, existem dados nessa lista?
2 - Tem certeza que é assim que se usa o p:dataTable? (Pergunto pq faz tempo que eu não uso JSF, teria que ver a documentação).

C

1 - Não existe nenhum dado na lista.
2 - Sim, é assim que se usa.
Eu acho que minha classe controller não está invocando a classe que lê o banco “LstEspecialidades”.

E

Você tinha dito que os métodos estavam sendo executados.

C

Sim eu disse, não é isso que mostra essa execução?

Attaching to tomcat_shared_memory_id
User program running
MethodBreakpoint [itc.systems.controller.EspecialidadesController].init successfully submitted.
LineBreakpoint EspecialidadesController.java : 35 successfully submitted.
LineBreakpoint LstEspecialidades.java : 29 successfully submitted.
LineBreakpoint EspecialidadesController.java : 33 successfully submitted.
MethodBreakpoint [itc.systems.controller.EspecialidadesController].init '()' successfully submitted.
LineBreakpoint EspecialidadesController.java : 33 successfully submitted.
E

Eu tinha entendido que o erro era no datable.

Voce precisa descobrir por que nao vem nenhum resultado nessa query. Tente outra query. E talvez sua classe JpaUtil tenha problemas.

C

É o que estou tentando fazer, agora vou testar o datatable nativo do jsf.

Criado 11 de abril de 2022
Ultima resposta 19 de abr. de 2022
Respostas 11
Participantes 2