Filtro com jpa e primefaces

Boa noite pessoal estou tentando implementar um filtro com jpa, jsf e primefaces. bom na minha bean eu tenho o método para o filtro

public List<Produto> filtroPersonalizado() {
     EntityManager em = JPAUtil.getEntityManager();
     String consulta = "select p from Produto p where p.nomeProduto = :nome";
     TypedQuery<Produto> query = em.createQuery(consulta, Produto.class);
     query.setParameter("nome", produto.getNomeProduto());
     this.resultado = query.getResultList();
     System.out.println(resultado.get(0).getNomeProduto());
     return resultado;
}

em minha view eu tenho os dados minha ideia inicial seria filtrar o campo digitado

<p:growl>
      Filtro: <p:inputText value="#{mbProduto.produto.nomeProduto}"/>
      
    	<p:commandButton icon="ui-icon-search" title="Filtrar"
    					action="#{mbProduto.filtroPersonalizado}">
    	</p:commandButton>
      </p:growl>
        <p:dataTable value="#{mbProduto.produto}" 
				var="produtos"
                paginator="true"
                rows="10"
                paginatorTemplate="{CurrentPageReport}
                {FirstPageLink}
                {PreviousPageLink} {PageLinks}
                {NextPageLink} {LastPageLink}
                {RowsPerPageDropdown}"
                rowsPerPageTemplate="5,10,15"
                style="width: 98%"
                lazy="true">                
				<p:column>
						<f:facet name="header">
							Cod.:
						</f:facet>
   			 			#{produtos.idProduto}
				</p:column>
				
				<p:column>
						<f:facet name="header">
							Nome:
						</f:facet>
   			 			#{produtos.nomeProduto}
				</p:column>

				<p:column>
						<f:facet name="header">
							Esf.:
						</f:facet>
   			 			#{produtos.especificacaoProduto}
				</p:column>
				
				<p:column>
						<f:facet name="header">
							X.:
						</f:facet>
   			 			#{produtos.medidaX}
				</p:column>
				
				<p:column>
						<f:facet name="header">
							Y.:
						</f:facet>
   			 			#{produtos.medidaY}
				</p:column>
				
				<p:column>
						<f:facet name="header">
							R$ Venda
						</f:facet>
   			 			#{produtos.precoDeMetroVenda}
				</p:column>
				<p:column>
						<f:facet name="header">
							<h:outputText value="Ações" />
						</f:facet>
						<p:commandButton icon="ui-icon-close" title="Excluir um produto"
								action="#{mbProduto.excluir}"
							id="produtos" ajax="false" onclick="if(!confirm('Deseja excluir #{produtos.nomeProduto}  ?')) return false">
							<f:setPropertyActionListener value="#{produtos}" target="#{mbProduto.produto}"/>
					</p:commandButton>
					
					<p:commandButton icon="ui-icon-arrowreturnthick-1-s" title="Alterar um produto"
									 action="#{mbProduto.direcionarAlteracao}">
						<f:setPropertyActionListener  value="#{produtos}" target="#{mbProduto.produto}"/>
					</p:commandButton>
					
					<p:commandButton icon="ui-icon-circle-plus" title="Adicionar um produto" action="#{mbProduto.novo}"/>
				</p:column>		
				</p:dataTable>

obs: isso é apenas para eu ver no console se estava pegando e estava: System.out.println(resultado.get(0).getNomeProduto());
então quando o usuário digitasse o nome a tabela traria o nome selecionado.

obrigado

Acho que você esqueceu de nos dizer qual que é o problema :slight_smile:

:expressionless: o que estou tentando fazer seria um filtro personalizado do campo imput entende ao passar o dado de entrada recarregar minha tabela com os resultados informados
ou seja os passos são o seguintes:

  1. o usuário entrou na tela
  2. ao usuário informar um registro no campo input e pressionar o botão para buscar a tabela é carregada.

acho que é isso

obs: não gostaria de fazer da forma do showcase do primefaces, pois não quero que minha aplicação fique muito presa a ele, apesar de isso já estar acontecendo.

:slight_smile:

Sim, eu entendi o que você quer fazer, mas eu não entendi o que que está dando errado, que problema aconteceu que te impede de fazer o que quer?

simplesmente não gera erro nenhum e não faz a listagem

vou postar meu código inteiro para você ver

<?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:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui">
<!-- 
@autor: André Martins
@contact: andremartins@outlook.com.br
@cel: 63 8412 1921
 -->
<h:head>
	<title><ui:insert name="title">Modelo de Página</ui:insert></title>
	<h:outputStylesheet library="css" name="estilo.css"/>
</h:head>
<h:body>
    	<ui:composition template="/templates/master.xhtml"> 
        <ui:define name="conteudo">
      <h2><p:outputLabel value=" Filtro e ações para produtos"/></h2>
<p:growl>  
      Filtro: <p:inputText value="#{mbProduto.produto.nomeProduto}"/>  
        
        <p:commandButton icon="ui-icon-search" title="Filtrar"  
                        action="#{mbProduto.filtroPersonalizado}">  
        </p:commandButton>  
      </p:growl>
        <p:dataTable value="#{mbProduto.produtos}" 
				var="produtos"
                paginator="true"
                rows="10"
                paginatorTemplate="{CurrentPageReport}
                {FirstPageLink}
                {PreviousPageLink} {PageLinks}
                {NextPageLink} {LastPageLink}
                {RowsPerPageDropdown}"
                rowsPerPageTemplate="5,10,15"
                style="width: 98%"
                lazy="true">                
				<p:column>
						<f:facet name="header">
							Cod.:
						</f:facet>
   			 			#{produtos.idProduto}
				</p:column>
				
				<p:column>
						<f:facet name="header">
							Nome:
						</f:facet>
   			 			#{produtos.nomeProduto}
				</p:column>

				<p:column>
						<f:facet name="header">
							Esf.:
						</f:facet>
   			 			#{produtos.especificacaoProduto}
				</p:column>
				
				<p:column>
						<f:facet name="header">
							X.:
						</f:facet>
   			 			#{produtos.medidaX}
				</p:column>
				
				<p:column>
						<f:facet name="header">
							Y.:
						</f:facet>
   			 			#{produtos.medidaY}
				</p:column>
				
				<p:column>
						<f:facet name="header">
							R$ Venda
						</f:facet>
   			 			#{produtos.precoDeMetroVenda}
				</p:column>
				
				<p:column>
						<f:facet name="header">
							<h:outputText value="Ações" />
						</f:facet>
						<p:commandButton icon="ui-icon-close" title="Excluir um produto"
								action="#{mbProduto.excluir}"
							id="produtos" ajax="false" onclick="if(!confirm('Deseja excluir #{produtos.nomeProduto}  ?')) return false">
							<f:setPropertyActionListener value="#{produtos}" target="#{mbProduto.produto}"/>
					</p:commandButton>
					
					<p:commandButton icon="ui-icon-arrowreturnthick-1-s" title="Alterar um produto"
									 action="#{mbProduto.direcionarAlteracao}">
						<f:setPropertyActionListener  value="#{produtos}" target="#{mbProduto.produto}"/>
					</p:commandButton>
					
					<p:commandButton icon="ui-icon-circle-plus" title="Adicionar um produto" action="#{mbProduto.novo}"/>
				</p:column>
						
				</p:dataTable>
            
        </ui:define>  
    </ui:composition>
</h:body>
</html>


 */
@ManagedBean(name="mbProduto")
public class MbProduto implements Serializable{
	private static final long serialVersionUID = 1L;
	private Produto produto;
	private ProdutoDao produtoDao;
	private List<Produto>produtos;
        private List<Produto>resultado;
	
	public MbProduto(){
		this.produto = new Produto();
		this.produtoDao = new ProdutoDao();
		this.produtos = new ArrayList<Produto>();
                this.resultado = new ArrayList<Produto>();
	}
	
    public List<Produto> getProdutos() {
    	EntityManager em = JPAUtil.getEntityManager();
    	Query q = em.createQuery("select a from Produto a",
    	                Produto.class);
    	this.produtos = q.getResultList();
    	em.close();
    	return produtos;
    }

	public Produto getProduto() {
		return produto;
	}

	public void setProduto(Produto produto) {
		this.produto = produto;
	}

	public ProdutoDao getProdutoDao() {
		return produtoDao;
	}

	public void setProdutoDao(ProdutoDao produtoDao) {
		this.produtoDao = produtoDao;
	}
	
	public String excluir() {
		produtoDao.excluir(produto);
		return null;
	}
	public String salvar(){
		if(produto.getIdProduto() == null || produto.getIdProduto() == 0 ){
			produtoDao.salvar(produto);
			//FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Inserção de produtos", "inserido com sucesso.");
			//RequestContext.getCurrentInstance().showMessageInDialog(message);
		} else {
			produtoDao.alterar(produto);
			//FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Alteração de produtos", "Alterado com sucesso.");
			//RequestContext.getCurrentInstance().showMessageInDialog(message);
		}
		return "pgtbproduto";	
	}
	public String novo(){
		return "pgproduto";
	}
	public String direcionarAlteracao(){
		return "pgproduto";
	}

public List<Produto> filtroPersonalizado() {  
     EntityManager em = JPAUtil.getEntityManager();  
     String consulta = "select p from Produto p where p.nomeProduto = :nome";  
     TypedQuery<Produto> query = em.createQuery(consulta, Produto.class);  
     query.setParameter("nome", produto.getNomeProduto());  
     this.resultado = query.getResultList(); 
     return resultado;  
} 
}

ta ai, no caso dos get e set do resultado eu tirei mas no codigo original eles existem.

você viu se o método é invocado e processa corretamente?

tentou dar um update na dataTable?