Componente Autocomplet Primefaces "desaparece da tela" após update no ManagedBean
6 respostas
jsfprimefaces
V
Vinicius.bc
Boa noite, estou tentando inserir um produto automaticamente após ler o código e faço a atualização dos componentes no managedBean. No Entanto, o componente autocomplete desaparece da tela depois que faço o context.update(panelGroup)
Obs.: A solução funciona, no entanto eu gostaria de limpar o autocomplete após a inserção do produto.
Alguém poderia me ajudar a entender o que estar acontecendo, por favor?
publicList<Produto>produtosSugeridos(Stringquery){lisProdutosSugeridos=produtoServico.listarTodos();List<Produto>produtosFiltrado=newArrayList<Produto>();for(Produtop: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]*")){RequestContextcontext=RequestContext.getCurrentInstance();for(Produtop:produtosFiltrado){produtoDaVenda.setProduto(p);adicionaProdutosNaVenda();produtoDaVenda.setQuantidade(1.0);produtosFiltrado=newArrayList<Produto>();context.update("panelProdutos");context.update("panel");//Atualizo o autocompletcontext.update("panelInputProdu");}}returnprodutosFiltrado;}
Aqui código na página .xhtml
<h:panelGroupid="panelInputProdu"><h:panelGrid<p:autoCompletetabindex="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:ajaxevent="itemSelect"update="autoProduto,:formVenda:precoVenda"/></p:autoComplete><p:watermarkfor="autoProduto"value="Digite o produto"/></h:column>
Pra remover do autoComplete é só deixar null o atributo do value.
Pq atualizar pelo bean?
Se você vai dar update em vários componentes, separe-os por espaço e não por vírgula
Falta o fechamento da primeira tag panelGrid
V
Vinicius.bc
Bom dia Mike, obrigado por ter respondido.
Pq atualizar pelo bean?
Então, nesse caso vai digitar o codigo de barras e automaticamente inserir o produto sem a necessidade do usuário interagir com a pagina .xhtml. Por isso precisava atualizar pelo managedBean. No entanto, quando faço: context.update("panelInputProdu"); o autocomplete fica como na imagem. Você conhece algum comando tipo: autocomplete.clear()?
se Retirar essa linha: context.update("panelInputProdu"); o código digitado fica no autocoplete e meu objetivo é apaga-lo apos inserir produto no managedBean.
Mike
Eu te respondi isso no post acima, é só deixar nulo o atributo referenciado pelo value
É que você pode fazer o update pela página xhtml mesmo e se você passa um id errado é lançado uma exceção, no caso de fazer o update pelo bean você não recebe exceção.
V
Vinicius.bc
Olá Mike,
Eu te respondi isso no post acima, é só deixar nulo o atributo referenciado pelo value
Então, meu value no autocomplete na página é: #{vendaControlador.produtoDaVenda.produto}
É que você pode fazer o update pela página xhtml mesmo e se você passa um id errado é lançado uma exceção, no caso de fazer o update pelo bean você não recebe exceção.
Desculpa, mas não entendi como faria atualização na pagina já que vai ler o código e automaticamente será adicionado(sem o usuário clicar em Adiconar). E só atualiza se fizer esse comando: context.update("panelInputProdu"); Setei a Quantidade e o produto, mas acredito que seja algum erro na instancia do value. Como pode ser visto na imagem abaixo.
o value na pagina: value="#{vendaControlador.produtoDaVenda.produto}"
Setei no managedBean: produtoDaVenda.setProduto(null)
Se inserir pelo botão adiciona funciona, mas update direto no managebBean não!
Realmente não estou entendendo o que estar acontecendo com o autocomplete, mais uma vez obrigado pela força.
Mike
O código vai vir do autocomplete, não? Ai o ajax atualiza a página
V
Vinicius.bc
Tenho um Converter de produto. o Autocomplete chama o médodo: produtosSugeridos(String query)como pode ser visto acima. A cada numero digitado vai fazendo a busca no método e retornando o produto. Se digitar 13 numero e encontrar um produto, então eu chamo o AdicionarProdutoNaVenda() sem o usuario clicar no botão adiconar, entendeu? por isso preciso atualizar no managedBean. A quantidade vai, mas o autocomplete dar esse problema.