JSF + JPA - problema para criar um campo de busca

Galera… bom dia!
Estou com um problema para implementar um campo de busca em uma aplicação, não estou conseguindo fazer a lógica correta.

Classe DaoImp

 public List novaList2(){
List<Cliente2> cliente2 = null;
Cliente2 c = new Cliente2();
 try {
      EntityManagerFactory factory = Persistence.createEntityManagerFactory("academico");
    EntityManager manager = factory.createEntityManager();
  cliente2 = manager.createNamedQuery("Cliente2.findByIdCliente")
   .setParameter("idCliente", c.getIdCliente()).getResultList(); 
//Por desencargo de ser erro de sql ou algo do genero, Se deixar o .setParamater("idCliente", 1) a tabela me traz o resultado!
 } catch (Exception e) {
  e.printStackTrace();
 }
 return cliente2;
}

Classe ClienteController

 public DataModel getListarCliente2() {
        List<Cliente2> lista2 = new ClienteDaoImp().novaList2();
        listaCliente2 = new ListDataModel(lista2);
        return listaCliente2;
    }

Classe Index.xhtml

 <p:dialog header="Sistema Cliente" widgetVar="dialogGerCliente2"  resizable="true" modal="true" showEffect="slide">

        
        <h:form id="frmtabela2">
            
                            <h:panelGrid id="infosCliente2" columns="2" style="margin-bottom:10px">

                               <h:form id="frmbusca">
                    <h:outputLabel for="idCliente" value="Buscar" />
                    <h:inputText id="idCliente" value="#{clienteController.cliente2.idCliente}"/>
                    <p:commandButton update=":frmtabela2:tabela2" oncomplete="dialogGerCliente.hide();" actionListener="#{clienteController.listarCliente2}" value="Buscar"/>

                    </h:form>
                                
                               
                    <p:dataTable id="tabela2" var="cliente" value="#{clienteController.listarTodos}">
                       
                        <p:column>
                            <f:facet name="header">
                                <h:outputText value="ID do Cliente"/>
                            </f:facet>
                            <h:outputText value="#{cliente.idCliente}" />
                        </p:column>
                        <p:column>
                            <f:facet name="header">
                                    <h:outputText value="Nome do Cliente"/>
                            </f:facet>
                            <h:outputText value="#{cliente.nomeCliente}"/>
                        </p:column>
                        <p:column>
                            <f:facet name="header">
                                <h:outputText value="Endereço"/>
                            </f:facet>
                            <h:outputText value="#{cliente.endereco}"/>
                        </p:column>
                        <p:column>
                            <f:facet name="header">
                                <h:outputText value="Telefone"/>
                            </f:facet>
                            <h:outputText value="#{cliente.telefone}"/>
                        </p:column>
                        <p:column>
                            <f:facet name="header">
                                <h:outputText value="Situacao"/>
                            </f:facet>
                            <h:outputText value="#{cliente.situacaoAntiga}"/>
                        </p:column>
                       
                        <p:column>
                            <f:facet name="header">
                                <h:outputText value="Alterar"/>
                            </f:facet>
                            <p:commandButton actionListener="#{clienteController.prepararAlterarCliente}" value="Alterar" update=":frmcliente:infosCliente" oncomplete="dialogGerCliente.show()"/>
                        </p:column>
                        <p:column>
                            <f:facet name="header">
                                <h:outputText value="Excluir"/>
                            </f:facet>
                            <h:commandLink action="#{clienteController.excluirCliente}" value="Excluir"/>
                        </p:column>
                    </p:dataTable>
                                </h:panelGrid>
                </h:form>
                    
                </p:dialog>
        

você debugou seu código para ver o que está retornando “c.getIdCliente()”?

se você diz que “.setParamater(“idCliente”, 1)” retorna algo.

e outra se vc filtrar pelo id, se está seguindo o conceito de Identificador, você nunca terá uma lista mesmo,
para listar você teria que utilizar outro parâmetro mais abstrato, e fazer tratamentos necessários.

Bom é uma sugestão, até porque não sei como está esta query sua"Cliente2.findByIdCliente".
poderia postar ela para melhores conclusões;

Acabei alterando e deixando assim…

A Query, estou usando NamedQuery

    @NamedQuery(name = "Cliente2.findByIdCliente", query = "SELECT c FROM Cliente2 c WHERE c.idCliente = :idCliente"),

ClienteDaoImp

 public List novaList2(){
List<Cliente2> cliente2 = null;
Cliente2 c = new Cliente2();
 try {
      EntityManagerFactory factory = Persistence.createEntityManagerFactory("academico");
    EntityManager manager = factory.createEntityManager();
  cliente2 = manager.createNamedQuery("Cliente2.findByNomeCliente")
   .setParameter("nomeCliente", c.getNomeCliente()).getResultList();
 } catch (Exception e) {
  e.printStackTrace();
 }

 return cliente2;
}

index.xhtml

  <h:form id="frmbusca">
                <h:outputLabel for="nomeCliente" value="Buscar" />
                <h:inputText id="nomeCliente" value="#{clienteController.cliente2.nomeCliente}"/>
                <p:commandButton update=":frmtabela2:tabela2" oncomplete="dialogGerCliente2.hide();" actionListener="#{clienteController.listarCliente2}" value="Buscar">
                </p:commandButton>

            </h:form>

Pensei em tentar usar getResultList, mas ai ele não me traria apenas os resultados desejados e sim a lista inteira correto?

Fiz um teste agora usando o seguinte código

        public String funcionando(String nome){
               
 Cliente2 cliente2 = new Cliente2();
      EntityManagerFactory factory = Persistence.createEntityManagerFactory("academico");
    EntityManager manager = factory.createEntityManager();
  cliente2 = (Cliente2) manager.createNamedQuery("Cliente2.findByNomeCliente")
   .setParameter("nomeCliente", nome)
   .getSingleResult();
  
        System.out.println(cliente2.getNomeCliente());
               System.out.println(cliente2.getEndereco());
        return null;
 
           }
  public static void main (String args[]){
        Cliente2 c = new Cliente2();
     
       c.funcionando("felipe");
 
}

Assim ele funcionou! Se eu usasse este jeito, como poderia coloca-lo em um DataModel?

Fiz as seguintes alterações

ClienteDaoImp

 public List<Cliente2> list2(String nomeCliente) {
      EntityManagerFactory factory =
                Persistence.createEntityManagerFactory("academico");

        EntityManager manager = factory.createEntityManager();       
       Query query = manager.createNamedQuery("Cliente2.findByNomeCliente");
       query.setParameter("nomeCliente", nomeCliente);
        List<Cliente2> clientes = query.getResultList();
        for(Cliente2 l:clientes){
            System.out.println(l.getNomeCliente());
        }
                   
        return clientes;
    }

ClienteDao

    public List<Cliente2> list2(String nomeCliente);

ClienteController

public DataModel getListarCliente2(String nomeCliente) {
        List<Cliente2> lista2 = new ClienteDaoImp().list2(nomeCliente);
        listaCliente2 = new ListDataModel(lista2);
        return listaCliente2;
    }

index.xhtml

   <h:form id="frmbusca">
                <h:outputLabel for="nomeCliente" value="Buscar" />
                <h:inputText id="nomeCliente" value="#{clienteController.cliente2.nomeCliente}"/>
                <p:commandButton ajax="false" update=":frmtabela2:tabela2" oncomplete="dialogGerCliente2.hide();" actionListener="#{clienteController.getListarCliente2(nomeCliente)}" value="Buscar">
                </p:commandButton>

            </h:form>

Recebo agora o seguinte erro:
javax.el.PropertyNotFoundException: /index.xhtml @169,98 value="#{clienteController.cliente2.nomeCliente}": Target Unreachable, ‘cliente2’ returned null