List coming with null value

Asked

Viewed 194 times

2

Well, the thing is, I have three methods that are called init() of my Bean, only one works and the other 2 comes as null, I’ve already debugged and in my Product the data is correct, but when I arrow in the Lists the data it is null.

Here are the 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

Product

/*
 * 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 in the Product class

@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"),

And finally my view, I will put only the block where it is called to one of the 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>

The method atualizarListaCategorias() in my bean paginasController works perfectly, I don’t know why this or if it is a bug, because in the Tomcat log does not report anything, this is strange.

Thank you to all who try!

EDIT

Product class

    /*
     * 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.dominio;

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.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;

/**
  *
 * @author Sheldon Merá
 */
@Entity
@NamedQueries({
@NamedQuery(name = "produto.produtoPorNome", query = "SELECT p FROM Produto p WHERE p.descricao LIKE :descricao AND p.ativo = true"),
@NamedQuery(name = "produto.produtoPorCategoria", query = "SELECT p FROM Produto p, Categoria c WHERE p.categoria.id  = c.id AND p.ativo = TRUE AND c.descricao = :descricaoCategoria"),
@NamedQuery(name = "produto.buscarClientePorProduto", query = "SELECT c FROM Cliente c, Produto p WHERE p.cliente.id  = :id"),
@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"),
@NamedQuery(name = "produto.produtoPorCliente", query = "SELECT p FROM Produto p  WHERE p.cliente.email = :identificacaoCliente"),})

public class Produto implements Serializable, Modelo<Long> {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
@Column(nullable = false)
private String descricao;

private Boolean statusDestaque;

private Boolean statusSuperDestaque;

@JoinColumn
@ManyToOne
private Cliente cliente;

@JoinColumn
@ManyToOne
private SubCategoria subCategoria;

@JoinColumn
@ManyToOne
private Categoria categoria;

private String imagem;

private Float preco;

private Boolean ativo;

@Override
public Long getId() {
    return id;
}

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

/**
 * @return the descricao
 */
public String getDescricao() {
    return descricao;
}

/**
 * @param descricao the descricao to set
 */
public void setDescricao(String descricao) {
    this.descricao = descricao;
}

/**
 * @return the statusDestaque
 */
public Boolean getStatusDestaque() {
    return statusDestaque;
}

/**
 * @param statusDestaque the statusDestaque to set
 */
public void setStatusDestaque(Boolean statusDestaque) {
    this.statusDestaque = statusDestaque;
}

/**
 * @return the cliente
 */
public Cliente getCliente() {
    return cliente;
}

/**
 * @param cliente the cliente to set
 */
public void setCliente(Cliente cliente) {
    this.cliente = cliente;
}

/**
 * @return the preco
 */
public Float getPreco() {
    return preco;
}

/**
 * @param preco the preco to set
 */
public void setPreco(Float preco) {
    this.preco = preco;
}

/**
 * @param imagem the imagem to set
 */
public void setImagem(String imagem) {
    this.imagem = imagem;
}

public String getImagem() {
    return imagem;
}

/**
 * @return the subCategoria
 */
public SubCategoria getSubCategoria() {
    return subCategoria;
}

/**
 * @param subCategoria the subCategoria to set
 */
public void setSubCategoria(SubCategoria subCategoria) {
    this.subCategoria = subCategoria;
}

/**
 * @return the categoria
 */
public Categoria getCategoria() {
    return categoria;
}

/**
 * @param categoria the categoria to set
 */
public void setCategoria(Categoria categoria) {
    this.categoria = categoria;
}

/**
 * @return the statusSuperDestaque
 */
public Boolean getStatusSuperDestaque() {
    return statusSuperDestaque;
}

/**
 * @param statusSuperDestaque the statusSuperDestaque to set
 */
public void setStatusSuperDestaque(Boolean statusSuperDestaque) {
    this.statusSuperDestaque = statusSuperDestaque;
}

/**
 * @return the ativo
 */
public Boolean getAtivo() {
    return ativo;
}

/**
 * @param ativo the ativo to set
 */
public void setAtivo(Boolean ativo) {
    this.ativo = ativo;
}

}

EDIT2 Images of the Methods Paginacontroleer inserir a descrição da imagem aqui

Metodo no Productojpadao inserir a descrição da imagem aqui

JPADAO Arraylist Data inserir a descrição da imagem aqui

  • There is something strange, I saw in your xhtml value="#{paginasController.listDestaque}" and gave a Ctrl + f to search getListaThat and I did not find this method, it exists in the Paginascontroller class ?

  • yes it is in the getters and setters, just omitted here so that the code did not get as big, but it is there yes

  • put the source of the Product class then please.

  • OK, I edited the post with the product class

  • Your query: SELECT p FROM Product p WHERE p.statusDestaque = true AND p.active = TRUE; already confirmed that both columns have values 1 in the database (jpa maps atuomatically to Boolean)?

  • yes in the database, this correct, the problem is the following, I call the method in the controller there it goes in the Productojpadao and it executes the method when it goes in the line of the Return it returns an arraylist with the data I need (makes the select correctly)but when it comes back to the controller and arrow in the arraylist from there it simply comes null, in the error on Tomcat nor anything is too strange

  • What is your Product Table like? Its primary key really is the column id?

Show 2 more comments

1 answer

1


Your mistake is in your service.

  • Productoservice

    public List<Produto> buscarPrincipaisProdutos(){
        //ligar serviço ao repositório
        return null; //ajuste isso
    }
    

For if his Product has the objects so the service is not bridging between it and the controller

Browser other questions tagged

You are not signed in. Login or sign up in order to post.