dataTable não retorna registros (MVC) [RESOLVIDO]

4 respostas
rogerio_gentil

E ae galera? Alguém pode ajudar???

Criei uma página em projeto que arquitetado em MVC com JPA + JSF + PrimeFaces. Entretanto, não está retornando os registros do banco de dados:

Códigos:

- listaParametros.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">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:p="http://primefaces.org/ui"
                template="./template.xhtml">
   <ui:define name="title">Parâmetros do Sistema</ui:define>

   <ui:define name="content">      

      <h:form>
         <p:dataTable id="listaDeParametros" value="#{parametroManagedBean.parametros}" var="parametro">
            <f:facet name="header">Lista de Parâmetros do Sistema</f:facet>

            <p:column>
               <f:facet name="header">Item</f:facet>
               <h:outputText value="1" />
            </p:column>

            <p:column>
               <f:facet name="header">Descrição</f:facet>
               <h:outputText value="#{parametro.descricao}" />
            </p:column>

            <p:column>
               <f:facet name="header">Valor</f:facet>
               <h:outputText value="#{parametro.valor}" />
            </p:column>

            <p:column headerText="Editar">
               <p:rowEditor />
            </p:column>
         </p:dataTable>
      </h:form>
      
   </ui:define>

</ui:composition>

- ParametroManagedBean.java

@ManagedBean(name = "parametroManagedBean")
@SessionScoped
public class ParametroManagedBean {
   
   private Parametro parametro;
   private List<Parametro> parametros;
   
   @EJB
   private ParametroFachada parametroFachada;
   
   public ParametroManagedBean() {
      this.parametros = new ArrayList<>();
   }

   public Parametro getParametro() {
      return parametro;
   }

   public void setParametro(Parametro parametro) {
      this.parametro = parametro;
   }

   public List<Parametro> getParametros() {
      return parametros;
   }
      
   public String alterar() {
      parametroFachada.alterar(this.getParametro());
      this.recuperarParametros();
      return "/listaParametros";
   }
   
   public String listar() {
      this.recuperarParametros();
      return "/listaParametros";
   }
   
   public void recuperarParametros() {      
      this.parametros = parametroFachada.listar();
   }
   
}

- ParametroFachada.java

@Stateless
public class ParametroFachada {

   @EJB
   private ParametroDAO parametroDAO;
   
   public void alterar(Parametro parametro) {
      parametroDAO.alterar(parametro);
   }
   
   public List<Parametro> listar() {     
      return parametroDAO.obterTodos();
   }
}

- ParametroDAO.java

@Stateless
public class ParametroDAO {
   
   @PersistenceContext
   private EntityManager em;
   
   public void alterar(Parametro parametro) {
      em.merge(parametro);
   }
   
   public List<Parametro> obterTodos() {
      return em.createQuery("SELECT param FROM Parametro").getResultList();
   }
}

Já testei até imprimir o retorno da List na classe DAO e printar no console (como no Tomcat), mas nada aparece a não ser duas mensagens de warning no console do GlassFish:

WARNING: PWC4011: Unable to set request character encoding to UTF-8 from context /carteirinhas, because request parameters have already been read, or ServletRequest.getReader() has already been called

WARNING: JSF1063: AVISO! Definindo valor de atributo não serializável em HttpSession (chave: parametroManagedBean, classe do valor: br.ufscar.carteirinhas.controle.ParametroManagedBean).

Alguma ideia?
Att.

4 Respostas

Hebert_Coelho

Na boa, a JPQL está funcionando?
SELECT param FROM Parametro

rogerio_gentil

jakefrog:
Na boa, a JPQL está funcionando?
SELECT param FROM Parametro

Então… como posso testar essa JPQL? Pois já tentei outras opções como:

em.createQuery("SELECT param FROM Parametro AS param").getResultList();

e

em.createNamedQuery("Parametro.findAll").getResultList();

Att.

Hebert_Coelho

Esse post pode te ajudar: http://uaihebert.com/?p=1137

rogerio_gentil

Hey jakefrog. O problema estava na camada… na camada entre a cadeira e o computador, como disse um amigo da Pós que faço… rs

Eu estava acessando a página pelo diretamente pela barra de endereço, o que não acionava do método listar() na classe Managed Bean. Tive que adicionar um menu (link) com a ação:

action="#{parametroManagedBean.listar}"

O detalhe faz a diferença!
Vlw.

Criado 16 de agosto de 2012
Ultima resposta 18 de ago. de 2012
Respostas 4
Participantes 2