Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Estou usando o autoComplete e não traz o restante da lista.

Opa bom dia, antigamente usava uma tabela na hora de mostrar meus produtos para fazer a compra, agora apreendi a usar o autoComplete, só que não me traz o nome do produto e nem nada, oque estou errando?

Meu Dao

@SuppressWarnings("unchecked")
    public List<Produto> buscarPorNome(String nome) {
        Session session = this.manager.unwrap(Session.class);
        Criteria criteria = session.createCriteria(Produto.class);
        if(!nome.equals("")) {
            criteria.add(Restrictions.ilike("nome", nome, MatchMode.START));
        }
        return criteria.list();
    }

meu bean

@Transacional
    public List<Produto> completeProduto(String nome) {
        return produtoDao.buscarPorNome(nome);
    }

    public void adicionarProduto(Produto produtoAdicionado) {
        compraProduto = new Compra_produto();
        compraProduto.setProduto(produtoAdicionado);
        compraProdutos.add(compraProduto);
        System.out.println("Quantidade de produto: " + this.compraProdutos.size());
    }

e o html.

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!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://xmlns.jcp.org/jsf/html"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:p="http://primefaces.org/ui"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets">

<ui:composition template="/template/template.xhtml">
    <ui:define name="conteudo">
        <div class="ui-fluid">
            <h:form id="formularioTabelaCompra">
                <p:dataTable reflow="true">
                    <f:facet name="header">
                        <p:commandButton value="Inserir" icon="fa fa-fw fa-plus"
                            style="width:100px" actionListener="#{compraBean.formularioNovo}"
                            update=":formularioProduto" oncomplete="PF('inserir').show();" />
                    </f:facet>
                </p:dataTable>
            </h:form>
        </div>

        <p:dialog widgetVar="inserir" modal="true" responsive="true"
            appendTo="@(body)" resizable="false" draggable="false"
            closable="true" header="Pesquisar produto">
            <div class="ui-fluid">
                <h:form id="formularioProduto">
                    <p:panelGrid columns="4"
                        columnClasses="ui-grid-col-2,ui-grid-col-5,ui-grid-col-3,ui-grid-col-2"
                        layout="grid" styleClass="ui-panelgrid-blank">
                        <p:outputLabel value="Produto:" for="produto1" />
                        <p:autoComplete id="produto1"
                            value="#{compraBean.compraProduto.produto}"
                            placeholder="Pesquise pelo produto " required="true"
                            requiredMessage="O campo[PRODUTO] é obrigatório"
                            converter="produtoConverter" var="produto" itemValue="#{produto}"
                            itemLabel="#{produto.nome}"
                            completeMethod="#{compraBean.completeProduto}">
                            <p:ajax update=":tabelaProdutos" />
                        </p:autoComplete>
                        <p:commandButton value="Adicionar" icon="fa fa-fw fa-plus"
                            actionListener="#{compraBean.adicionarProduto(produto)}"
                            update=":formularioQuantidade formularioProduto"
                            oncomplete="PF('quantidade').show();" immediate="true" />
                        <p:commandButton icon="fa fa-fw fa-plus" immediate="true"
                            action="#{compraBean.formularioProduto}" />
                    </p:panelGrid>
                </h:form>
            </div>

            <h:form id="tabelaProdutos">
                <p:dataTable value="#{compraBean.compraProdutos}" var="compra"
                    reflow="true">
                    <p:column headerText="Produto">
                        <h:outputText value="#{compra.produto.nome}" />
                    </p:column>
                    <p:column headerText="Quantidade">
                        <h:outputText value="#{compra.quantidade}" />
                    </p:column>
                    <p:column headerText="Fornecedor">
                        <h:outputText value="#{compra.produto.fornecedor.nome}" />
                    </p:column>
                </p:dataTable>
            </h:form>
        </p:dialog>

        <p:dialog modal="true" header="Quantidade de produto"
            widgetVar="quantidade" appendTo="@(body)" closable="true"
            resizable="false" draggable="false" responsive="true">
            <div class="ui-fluid">
                <h:form id="formularioQuantidade">
                    <p:panelGrid columns="2"
                        columnClasses="ui-grid-col-5,ui-grid-col-7" layout="grid"
                        styleClass="ui-panelgrid-blank">
                        <p:outputLabel value="Quantidade: " for="quantidade" />
                        <p:inputText id="quantidade"
                            value="#{compraBean.compraProduto.quantidade}" required="true"
                            requiredMessage="O campo[QUANTIDADE]é obrigatório" />
                    </p:panelGrid>

                    <p:panelGrid columns="2"
                        columnClasses="ui-grid-col-6,ui-grid-col-6" layout="grid"
                        styleClass="ui-panelgrid-blank">
                        <p:commandButton value="Ok" icon="fa fa-fw fa-check"
                            update=":tabelaProdutos" onclick="PF('quantidade').hide();" />
                        <p:commandButton value="Cancelar" icon="fa fa-fw fa-thumbs-down"
                            immediate="true" onclick="PF('quantidade').hide();" />
                    </p:panelGrid>
                </h:form>
            </div>
        </p:dialog>
    </ui:define>
</ui:composition>
</html>

Oque eu quero fazer? quero que na hora de escolher os produtos, com o autocomplete ele busca o produto e coloca o produto em uma tabela, para ficar mostrando qual produto que estou adicionando, mais do jeito que tá, só mostra a quantidade de produto, não mostra nome, não mostra fornecedor... Lembrando que ele está fazendo o auto complete correto está mostrando os meus produtos, e quando clico nesse produto abre um dialog para quantidade desse produto, ai quando do ok, ele me renderiza apenas essa quantidade que acabei de passar, o nome do produto fica em branco na tabela de item :(

7 respostas

Quando vc seleciona o produto, onde que vc ta dizendo que ele deveria aparecer na outra tabela? pelo que vi vc só associa com algum objeto no seu bean, mas não parece ser suficiente para aparecer na tabela.

Alberto oque deveria fazer então :(

Alguém sabe qual problema estou tendo? ainda não consegui resolver :( alguma ajuda?

vc precisa adicionar o objeto na lista referenciada pela outra tabela.

Mais alberto eu já estou fazendo isso não estou?

Alberto fiz umas modificação agora está aparecendo o produto só que o primeiro produto não aparece, aparece a partir do 2 produto. Oque será que é agora?

<p:dialog responsive="true" header="Compra" modal="true"
            appendTo="@(body)" closable="true" resizable="false"
            draggable="false" widgetVar="novo" style="max-width:600px">
            <h:form id="formularioNovo">
                <p:wizard flowListener="#{compraBean.proximo}">
                    <p:tab id="Produto" title="Produto">
                        <div class="ui-fluid">
                            <p:panelGrid columns="4"
                                columnClasses="ui-grid-col-4,ui-grid-col-4,ui-grid-col-4,ui-grid-col-4"
                                layout="grid" styleClass="ui-panelgrid-blank">
                                <p:outputLabel value="Produto: " for="produto" />
                                <p:autoComplete id="produto" required="true"
                                    requiredMessage="O campo[PRODUTO]é obrigatório"
                                    value="#{compraBean.compraProduto.produto}"
                                    converter="produtoConverter"
                                    completeMethod="#{compraBean.completeProduto}" var="p"
                                    itemLabel="#{p.nome}" itemValue="#{p}"
                                    placeholder="Pesquise pelo nome do produto"
                                    title="Digite o nome do produto" />
                                <p:commandButton value="Adicionar" icon="fa fa-fw fa-plus"
                                    actionListener="#{compraBean.adicionarProduto(p)}"
                                    update="formularioItens:tabelaItens" />
                            </p:panelGrid>

                            <h:form id="formularioItens">
                                <p:dataTable id="tabelaItens"
                                    value="#{compraBean.compraProdutos}" var="compraProduto"
                                    emptyMessage="">
                                    <f:facet name="header">
                                    Itens da compra
                                </f:facet>
                                    <p:column headerText="Produto">
                                        <h:outputText value="#{compraProduto.produto.nome}"/>
                                    </p:column>
                                </p:dataTable>
                            </h:form>
                        </div>
                    </p:tab>
                </p:wizard>
            </h:form>
        </p:dialog>

e o metodo que adiciona o produto na lista.

public void adicionarProduto(Produto produtoAdicionado) {
        compraProduto = new Compra_produto();
        compraProduto.setProduto(produtoAdicionado);
        compraProdutos.add(compraProduto);
        System.out.println("Quantidade de produto: " + this.compraProdutos.size());
        System.out.println("Produto adicionado: " +produtoAdicionado);
    }
solução!

Resolvido já vlw

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software