List com valor null[RESOLVIDO]

5 respostas
severuspedreirus

Bom é o seguinte, tenho 3 metodos que são chamdos no init() da minha Bean, apenas um funciona e os outros 2 vem como null, já debuguei, na minha ProdutoJPADAO os dados estao corretos, mas quando seta nas Lists os dados ele fica null, eis as classes:

PaginasCOntroller

[
import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import javax.faces.bean.ManagedBean;
import br.com.ofertacidade.model.dominio.Categoria;
import br.com.ofertacidade.model.dominio.Cliente;
import br.com.ofertacidade.model.dominio.Produto;
import br.com.ofertacidade.model.service.CategoriaService;
import br.com.ofertacidade.model.service.ProdutoService;
import br.com.ofertacidade.model.service.ServiceException;
import br.com.ofertacidade.model.util.SessionUtil;
import javax.annotation.PostConstruct;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.ViewScoped;
import org.apache.log4j.Logger;
import com.sun.faces.context.flash.ELFlash;
import javax.faces.bean.SessionScoped;

    /**
 *
 * @author Sheldon Merá
 */
@Controller
@ManagedBean
@ViewScoped
public class PaginasController {

String nomeProduto;
Logger logger;

private Produto produto;
private Cliente cliente;
private Categoria categoria;
private Categoria categoriaBusca;
private List<Produto> produtos;
private Produto produtoEscolhido;

private List<Produto> produtosPorCategoria;
private List<Produto> produtosBuscados;
private List<Categoria> categorias;
private String nomeCategoria;
private String nomeContat;
private String telefoneContato;
private String mensagemContato;
private String emailContato;
private String produtoBuscado;
private String pagina;
private SessionUtil sessao;
private Long idProduto;

private List<Produto> listaSuper;

private List<Produto> listaDestaque;

@Autowired
private CategoriaService categoriaService;

@Autowired
private ProdutoService produtoService;

@PostConstruct
public void init() {
    try {
        atualizarListaCategorias();
        destaques();
        superDestaque();
        logger = Logger.getLogger(ProdutoController.class);
    } catch (ServiceException e) {

    }
}

public PaginasController() {
    novaPagina();
}

private void novaPagina() {
    cliente = new Cliente();
    produto = new Produto();
    produtoEscolhido = new Produto();
    listaSuper = new ArrayList<>();
    listaDestaque = new ArrayList<>();
}

public void atualizarListaCategorias() throws ServiceException {
    setCategorias(categoriaService.buscarTodos());
}

public void produtoPorCategoria() throws ServiceException {
    setProdutosPorCategoria(produtoService.produtoPorCategoria("Livros e Arte"));
}

private void destaques() throws ServiceException {
    setListaDestaque(produtoService.buscarPrincipaisProdutos());

}

private void superDestaque() throws ServiceException {
    setListaSuper(produtoService.buscarProdutosSuperDestaque());

}

public void produtoPorID() throws ServiceException {
    produto = produtoService.buscarPorId(getIdProduto());
}

public void buscaProdutoPorNome() throws ServiceException {
    setProdutosBuscados(produtoService.buscarPorNome(produtoBuscado));

}

public void clienteProdutoEscolhido() throws ServiceException {
    cliente = produtoService.buscaClientePorProduto(produto.getId());
}

public void enviarMensagem() {

}

public void limparMensagem() {

}

public String redirect() {
    return "teste";
}
//setters & getters

ProdutoJPADAO

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.ofertacidade.model.dao.implementacao;

import br.com.ofertacidade.model.dao.ProdutoDAO;
import br.com.ofertacidade.model.dao.exception.DAOException;
import br.com.ofertacidade.model.dominio.Cliente;
import br.com.ofertacidade.model.dominio.Produto;
import java.util.List;
import javax.persistence.TypedQuery;
import javax.transaction.Transactional;
import org.springframework.stereotype.Repository;

/**
 *
 * @author Sheldon Merá
 */
@Repository
@Transactional
public class ProdutoJPADAO extends GenericJPADAO<Produto, Long> implements ProdutoDAO {

public ProdutoJPADAO() {
    super(Produto.class);
}

@Override
public List<Produto> buscarPorNome(String nome) throws DAOException {
    TypedQuery<Produto> query = em.createNamedQuery("produto.produtoPorNome", Produto.class);
    query.setParameter("descricao", "%" + nome + "%");
    return query.getResultList();
}

@Override
public List<Produto> buscarProdutoPorCliente(Cliente fornecedor) throws DAOException {
    TypedQuery<Produto> query = em.createNamedQuery("produto.produtoPorCliente", Produto.class);
    query.setParameter("identificacaoCliente", fornecedor.getEmail());
    return query.getResultList();
}

@Override
public List<Produto> produtoPorCategoria(String categoria) throws DAOException {
    TypedQuery<Produto> query = em.createNamedQuery("produto.produtoPorCategoria", Produto.class);
    query.setParameter("descricaoCategoria", categoria);
    return query.getResultList();
}

@Override
public List<Produto> buscarPrincipaisProdutos() throws DAOException {
    TypedQuery<Produto> query = em.createNamedQuery("produto.principaisProdutos", Produto.class);
    return query.getResultList();
}

@Override
public Cliente buscaClientePorProduto(Long idProduto) {

    TypedQuery<Cliente> query = em.createNamedQuery("produto.buscarClientePorProduto", Cliente.class);
    query.setParameter("id", idProduto);
    List listaDaBusca = query.getResultList();
    Cliente encontrado = null;
    if (!listaDaBusca.isEmpty()) {
        return encontrado = (Cliente) listaDaBusca.get(0);

    } else {
        return null;
    }
}

@Override
public List<Produto> buscarProdutosSuperDestaque() throws DAOException {
    TypedQuery<Produto> query = em.createNamedQuery("produto.buscarProdutosSuperDestaque", Produto.class);
    return query.getResultList();
}

}
Querries na classe Produto
@NamedQuery(name = "produto.principaisProdutos", query = "SELECT p FROM Produto p WHERE p.statusDestaque  = true AND p.ativo = TRUE"),
@NamedQuery(name = "produto.buscarProdutosSuperDestaque", query = "SELECT p FROM Produto p WHERE p.statusSuperDestaque  = true AND p.ativo = TRUE"),

E por fim a minha view, vo colocar apenas o bloco onde é chamado a uma das lists:

<div class="product_box">
                        <ui:repeat id="destProd" var="destaque" value="#{paginasController.listaDestaque}" >
                            <h:commandLink  actionListener="#{paginasController.redirect()}" >
                                <h:graphicImage  library="resources" name="images/produtos/#{destaque.imagem}" />
                                <f:param name="id" value="#{destaque.id}" />
                            </h:commandLink><h3>#{prodEspeciais.descricao}</h3>
                            <p class="product_price">R$ #{prodEspeciais.preco}</p>
                            <p class="add_to_cart">
                                <h:link  outcome="teste.xhtml" >Detalhes
                                    <f:param name="id" value="#{prodEspeciais.id}" />
                                </h:link>
                            </p>
                        </ui:repeat>

                        <div class="cleaner"></div>                          
                    </div>

o método atualizarListaCategorias() no meu Bean paginasController funciona perfeitamente, não sei o porque disso ou se é um bug, porque no log do Tomcat nao reporta nada isso é estranho. Obrigado a todos que tentarem !

5 Respostas

aszarael

Você teria o Exception ??

Para poder olhar ?

severuspedreirus

aszarael:
Você teria o Exception ??

Para poder olhar ?

O problema é que nao tem Exception, o problema é o seguinte, chamo o metodo no controller ai ele vai na ProdutoJPADAO e la executa o metodo quando vai na linha do return ele retorna um arraylist com os dados que eu preciso(faz o select corretamente), mas quando volta pro controller e seta no arraylist de lá ele simplesmente vem nulo, na da erro no tomcat nem nada é muito estranho isso

severuspedreirus

Metodo do paginaController

Metodo no ProdutoJPADAO

Valores do arayList

aszarael

Cara,

as imagens não abriram, vou tem mandar um exemplo do meu codigo.

Case de Dao

package com.br.dao;

import java.util.List;
import java.util.logging.Logger;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import com.br.model.Ano;

public class AnoDao {
	
	private Logger        logger = Logger.getLogger("br.com.log");  
	private StringBuilder vSQL   = new StringBuilder();
	
	/* Metodo de Cria&#65533;&#65533;o do Entity Manager */
	private EntityManager getEntityManager(){
		return ManagerEntityManager.getEntityManager();
	}
	
	/* Metodo de consulta no banco de dados */
	private List<Ano> consultar(List<String> pColunas, List<String> pValores){
		
		EntityManager entityManager = getEntityManager();
		vSQL.append("from Ano as ano");
		
		if (pColunas != null){
			vSQL.append(" WHERE ");
			
			for (int i = 0; i < pColunas.size(); i++){
				if (i==0){
					vSQL.append(" " + pColunas.get(i).toString() + " = '" + pValores.get(i).toString() + "'");
				}else{
					vSQL.append(" AND " + pColunas.get(i).toString() + " = '" + pValores.get(i).toString() + "'");
				}
			}
		}
		
		vSQL.append(" ORDER BY NUM_ANO DESC");
		logger.info("Consulta : " + vSQL);
		Query vQuery = entityManager.createQuery(vSQL.toString());		
		@SuppressWarnings("unchecked")
		List<Ano> listaAno = vQuery.getResultList();
		//entityManager.close();
		return listaAno;		
	}
	
	public List<Ano> select(List<String> pColunas, List<String> pValores){
		return consultar(pColunas,pValores);
	}
}

Utilização

List<Ano> listaAno = new ArrayList<Ano>();

listaAno = anoDao.select(null, null);

O erro, pode ser na instancia da variavel, onde você está retornando.

severuspedreirus

O problema é que quando retorna da JPADAO ele vem com valor.

paginaController
http://s23.postimg.org/dtrolyqzv/control.jpg

JPADAO
http://s13.postimg.org/9o9zejs4n/jpa_DAO.jpg

valores da ArrayList quando retorna para o pagina controller
http://s17.postimg.org/e92eq1gan/list_Prod.jpg

mas quando da o set nas listas ele simplesmente nao adiciona nada

Criado 24 de abril de 2015
Ultima resposta 27 de abr. de 2015
Respostas 5
Participantes 2