Component Autocomplete Primefaces "disappears from the screen" after update on ManagedBean

0

Good afternoon, I'm trying to insert a product automatically after reading the code and update the components in the managedBean . However, the autocomplete component disappears from the screen after I do the context.update (panelGroup)

Note: The solution works, however I would like to clean the autocomplete after inserting the product.

Could anyone help me figure out what's going on, please?

public List<Produto> produtosSugeridos(String query) {              
        lisProdutosSugeridos = produtoServico.listarTodos();        

        List<Produto> produtosFiltrado = new ArrayList<Produto>();
        for (Produto p : lisProdutosSugeridos) {
            if (Pattern.compile(Pattern.quote(query), Pattern.CASE_INSENSITIVE).matcher(p.getNome()).find()
                    || Pattern.compile(Pattern.quote(query), Pattern.CASE_INSENSITIVE).matcher(p.getCodigoDeBarras()).find()) {
                produtosFiltrado.add(p);
            }
        }

        if(produtosFiltrado.size() == 1 && query.length() == 13 && query.matches("[0-9]*")){            

            RequestContext context = RequestContext.getCurrentInstance();           

            for (Produto p : produtosFiltrado) {                    
                produtoDaVenda.setProduto(p);

                adicionaProdutosNaVenda();  
                produtoDaVenda.setQuantidade(1.0);

                produtosFiltrado = new ArrayList<Produto>();

                 context.update("panelProdutos");
                 context.update("panel");
                 //Atualizo o autocomplet
                 context.update("panelInputProdu");
            }

        }       
        return produtosFiltrado;    
}

Here code in the .xhtml page

<h:panelGroup id="panelInputProdu">
    <h:panelGrid        
<p:autoComplete
    tabindex="8"
    id="autoProduto" 
    value="#{vendaControlador.produtoDaVenda.produto}"
    completeMethod="#{vendaControlador.produtosSugeridos}" 
    var="p" itemLabel="#{p.nome}"
    converter="produtoConverter" 
    temValue="#{p}"
    minQueryLength="2" maxResults="20"                                       
    update="autoProduto,:formVenda:precoVenda">'

   <p:ajax event="itemSelect" update="autoProduto,:formVenda:precoVenda" />                                     
</p:autoComplete>
     <p:watermark for="autoProduto" value="Digite o produto" />
</h:column>

    
asked by anonymous 17.10.2018 / 23:20

3 answers

0

In the page I have in% auto_complete%: value

In the value="#{vendaControlador.produtoDaVenda.produto}" method I put:

produtoDaVenda.setQuantidade(1.0); produtoDaVenda.setProduto(null);

The amount is ok as can be seen in the image above, but autocomplete disappears when doing produtosSugeridos(String query)

Someone could tell me what's going on. Appreciate.

    
18.10.2018 / 18:25
0

The autocomplete is getting this way because the return of it is always always an empty array, see that there you make a produtosFiltrado = new ArrayList<Produto>(); , that way the return array of the aucomplete method is empty. I believe you are mixing methods there, from what I understand you want to select an autocomplete item and add it to your listing, if so try the following:

public List <Produto> produtosSugeridos( String query ) {
  lisProdutosSugeridos = produtoServico.listarTodos();

  List<Produto> produtosFiltrado = new ArrayList<Produto>();
  for (Produto p :lisProdutosSugeridos) {
    if ( Pattern.compile( Pattern.quote( query ), Pattern.CASE_INSENSITIVE).matcher(p.getNome()).find()
        || Pattern.compile( Pattern.quote( query ), Pattern.CASE_INSENSITIVE).matcher(p.getCodigoDeBarras()).find()) {
      produtosFiltrado.add(p);
    }
  }

  return produtosFiltrado;
}

public void addProdutoAutoComplete(){
  RequestContext context = RequestContext.getCurrentInstance();
  if(produtoDavenda.getProduto != null){
    adicionaProdutosNaVenda();
    produtoDaVenda.setQuantidade(1.0);
    context.update("panelProdutos");
    context.update("panel");
    //Atualizo o autocomplet
    context.update("panelInputProdu");
  }
}

And in the autocomplete ajax it looks like this:

<p:ajax event="itemSelect" update="autoProduto,:formVenda:precoVenda" listener="#{vendaControlador.addProdutoAutoComplete}" process="@this,autoProduto"/>
    
18.10.2018 / 19:02
0

Good afternoon, Adriano. Thank you for trying to help.

  

"from what I understand you want to select an autocomplete item and add it to your listing .."

In that case, no! I want to read the code of a product and automatically insert it without the user having to click the "Add" button (Note: If clicking works).

The situation is this: let's say you will have a code reader and when you find the product will insert. This all in the managedBean, the user will not select the item on the screen and will not click on the Add button. Actually the problem is in that part of the code you said: produtosFiltrado = new ArrayList<Produto>(); What I caught was: How do I insert the item and give upadte and the component work normally? will I type a clear in the List or Automcomplete so that I can enter a new code? That's confusing! Note: if you leave% w / o the component "disappears" and remove, the component "hangs" with the selected product. As can be seen below

    
19.10.2018 / 20:27