Well, it's the following, I have 3 methods that are called in init()
of my Bean, only one works and the other 2 comes as null
, already debuguei and in my ProductJPADAO the data is correct, but when you drop the data in the Lists, it gets null
.
Here are the classes:
COntroller Pages
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
ProductoJPADAO
/*
* 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();
}
}
Queries 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'll just put 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 atualizarListaCategorias()
method in my Bean paginasController
works perfectly, I do not know why or if it is a bug, because in the Tomcat log it does not report anything, this is strange.
Thank you all for trying!
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 PageIntroleer
MethodinProductJPADAO
JPADAO ArrayList Data