Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
10
respostas

Id duplicada?

Estou tendo o seguinte problema:

Stack Trace javax.servlet.ServletException: A ID de componente formPedido:tabelaItensPedido:j_idt42 já foi encontrada na visualização.

Porém tenho certeza absoluta que só tem um data table com esse id.

Além disso quando mudo o id o erro ocorre do mesmo jeito (com o novo Id).

10 respostas

Oi Rafael,

aquela id da dataTable está no mesmo form do button/link?

Se tiver fora do form vc precisa utilizar os dois pontos na frente do componente (:idDaDataTable).

abs

Eu colapsei alguns itens pra ficar mais fácil de ver... A estrutura é basicamente essa.

http://imgur.com/69fkmvx

Tem alguns outros itens na página mas acho que o que importa está aí.

Você está herdando de um template? Se sim cole o código dos dois. Evite usar foto..dificulta a leitura em rede 3g.

solução!

=============TEMPLATE============

<?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">

=============/TEMPLATE============

================TEMPLATE==============

<?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:ui="http://java.sun.com/jsf/facelets"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://primefaces.org/ui"
    xmlns:pe="http://primefaces.org/ui/extensions">
<h:head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <h:outputStylesheet library="css" name="estilo.css" />
    <link rel="shortcut icon" type="image/x-icon"
        href="#{resource['img/icon.png']}" />
    <h:outputStylesheet
        name="webjars/font-awesome/4.0.3/css/font-awesome.css" />

    <title>JetiX!</title>
</h:head>
<h:body>
    <div id="mastercontainer">
        <div id="masterheader">
            <ul id="profilemenu" class="ui-widget-header">
                <h:form>
                    <li><h:outputText
                            value="Bem-vindo(a) #{atendenteBean.funcionarioLogado.funcionario.nome}" /></li>
                    <li><h:commandLink
                            action="#{funcionarioLogadoBean.deslogar()}"
                            value="Sair" /></li>
                </h:form>
            </ul>
            <div id="banner">
                <div id="banner_loja">
                    <h1 id="nomeLoja">#{constantesBean.nomeLoja}</h1>
                    <h2 id="sloganLoja">A melhor pizza do bairro!</h2>
                </div>
            </div>
            <h:form>
                <p:menubar>
                    <p:menuitem icon="fa fa-home" url="home.xhtml" title="Home"
                        value="Home" />
                    <p:menuitem icon="fa fa-users" url="cliente.xhtml" title="Clientes"
                        value="Clientes" />
                    <p:menuitem icon="fa fa-tag" url="produto.xhtml" title="Produtos"
                        value="Produtos" />
                    <p:menuitem icon="fa fa-shopping-cart" url="pedido.xhtml"
                        title="Pedidos" value="Pedidos" />
                </p:menubar>
            </h:form>
        </div>
        <div id="mastercontent">
            <ui:insert name="content">

                <!-- Aqui é minnha LACUNA -->

            </ui:insert>
        </div>
    </div>
    <h:outputScript library="js" name="colore_atual.js" />
    <h:outputScript library="js" name="estiliza_home.js" rendered="false"/>
</h:body>
</html>

================/TEMPLATE==============

========================VIEW========================

`<!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:ui="http://java.sun.com/jsf/facelets"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://primefaces.org/ui"
    xmlns:c="http://java.sun.com/jstl/core">
<ui:composition template="/WEB-INF/templates/_atendente.xhtml">
    <ui:define name="content">
        <p:growl id="growl" autoUpdate="true" />
        <h:form id="formbotoes">

            <p:commandButton value="Novo Pedido" icon="fa fa-magic"
                rendered="#{not pedidoBean.pedidoAberto and pedidoBean.ehNovoPedido()}"
                onclick="PF('dlg_tel_novo_pedido').show();" styleClass="botaomagic" />
            <p:commandButton action="#{pedidoBean.cancelaGravacao()}"
                icon="fa fa-times" rendered="#{pedidoBean.pedidoAberto}"
                styleClass="botaocancelar"
                value="#{empty pedidoBean.pedido.idPedido ? 'Cancela Pedido': 'Cancela Edição'}" />

        </h:form>


        <p:dialog header="Cliente do pedido" widgetVar="dlg_tel_novo_pedido"
            modal="true" resizable="false" height="150" id="dialog">
            <h:form id="formModal">
                <p:growl autoUpdate="true" />
                <p:panelGrid columns="2">
                    <p:outputLabel value="Telefone:" />
                    <p:inputMask mask="9999-?99999"
                        value="#{pedidoBean.telefoneParaNovoPedido}" />
                </p:panelGrid>
                <p:separator />
                <p:commandButton value="Iniciar pedido" icon="fa fa-magic"
                    action="#{pedidoBean.buscaClientePorTelefone()}"
                    styleClass="botaomagic" />
            </h:form>
        </p:dialog>

        <h:form id="formPedido">
            <p:panel
                header="#{pedidoBean.pedido.status.toString().toUpperCase()}"
                visible="#{pedidoBean.pedidoAberto or not pedidoBean.ehNovoPedido()}"
                id="painelPedido">
                <p:growl autoUpdate="true" />
                <p:panelGrid columns="2" styleClass="panelPedido">
                    <p:outputLabel value="Cliente:" />
                    <h:outputText value="#{pedidoBean.pedido.cliente.nome}"
                        styleClass="alinhadoAEsquerda" />

                    <p:outputLabel value="Telefones:" />
                    <h:outputText value="#{pedidoBean.pedido.cliente.telefones}"
                        styleClass="alinhadoAEsquerda" />
                    <p:outputLabel value="Endereço:" />
                    <h:outputText value="#{pedidoBean.pedido.cliente.endereco}"
                        styleClass="alinhadoAEsquerda" />
                </p:panelGrid>

                <p:panelGrid columns="2">
                    <p:outputLabel value="Adicionar Produto" for="produtoAdicionar" />
                    <p:autoComplete id="produtoAdicionar"
                        value="#{pedidoBean.produtoAdicionar}"
                        completeMethod="#{pedidoBean.completaProduto}" queryDelay="500">
                        <p:ajax event="itemSelect" listener="#{pedidoBean.handleSelect}"
                            update="@all" />
                    </p:autoComplete>
                </p:panelGrid>

                <p:dataTable value="#{pedidoBean.itens}" var="item"
                    binding="#{pedidoBean.tabelaItens}" emptyMessage="Não há itens"
                    id="tabelaItensPedido">
                    <f:facet name="header">
                            Itens do Pedido
                        </f:facet>
                    <p:column headerText="Produto">
                            #{item.produto.nomeProduto}                
                    </p:column>
                    <p:column headerText="Tamanho">
                            #{item.produto.tamanho}
                    </p:column>
                    <p:column headerText="Qtde">
                        <p:inputText value="#{item.quantidadePedida}"
                            disabled="#{pedidoBean.pedido.bloqueado}">
                            <p:ajax event="blur" update="@all"></p:ajax>
                        </p:inputText>
                    </p:column>
                    <p:column headerText="Valor">
                            #{item.valorUnitario}
                    </p:column>
                    <p:column headerText="Total">
                            #{item.total}
                    </p:column>
                    <p:column rendered="#{not pedidoBean.pedido.isBloqueado()}">
                        <p:commandLink action="#{pedidoBean.removeItem}">X</p:commandLink>
                    </p:column>
                </p:dataTable>


                <p:outputLabel styleClass="labelTotal">
                    Total:
                    </p:outputLabel>
                <h:outputText styleClass="textoTotal" id="totalDoPedido"
                    value="#{pedidoBean.total}">
                    <f:convertNumber type="currency" currencySymbol="R$" />
                </h:outputText>
                <p:panelGrid columns="8" styleClass="panelPedido"
                    style="margin: 8px auto;">
                    <p:outputLabel value="Forma de Pgto:" for="formapgto" />
                    <p:selectOneMenu id="formapgto"
                        value="#{pedidoBean.pedido.formaDePagamento}"
                        rendered="#{not pedidoBean.pedido.isBloqueado()}" required="true">
                        <f:selectItem itemValue="" itemLabel="Escolha um"
                            itemDisabled="#{pedidoBean.prontoParaGravar}" />
                        <f:selectItems var="tipo" value="#{formaDePagamentoBean.tipos}"
                            itemLabel="#{tipo.toString()}" itemValue="#{tipo}" />
                        <p:ajax event="change" update="botaoGravar"></p:ajax>
                    </p:selectOneMenu>
                    <h:outputText value="#{pedidoBean.pedido.formaDePagamento}"
                        rendered="#{pedidoBean.pedido.isBloqueado()}" />

                    <p:outputLabel value="Pago:" for="pago" />
                    <p:selectOneMenu id="pago" value="#{pedidoBean.pedido.pago}"
                        rendered="#{not pedidoBean.pedido.isBloqueado()}">
                        <f:selectItem itemValue="#{false}" itemLabel="Não" />
                        <f:selectItem itemValue="#{true}" itemLabel="Sim" />
                    </p:selectOneMenu>
                    <h:outputText value="#{pedidoBean.pedido.pago? 'Sim':'Não'}"
                        rendered="#{pedidoBean.pedido.isBloqueado()}" />

                    <p:outputLabel value="Entregue:" for="entregue" />
                    <p:selectOneMenu id="entregue"
                        value="#{pedidoBean.pedido.entregue}"
                        rendered="#{not pedidoBean.pedido.isBloqueado()}">
                        <f:selectItem itemValue="#{false}" itemLabel="Não" />
                        <f:selectItem itemValue="#{true}" itemLabel="Sim" />
                    </p:selectOneMenu>
                    <h:outputText value="#{pedidoBean.pedido.entregue? 'Sim':'Não'}"
                        rendered="#{pedidoBean.pedido.isBloqueado()}" />

                    <p:outputLabel value="Troco para:" for="trocopara" />
                    <p:inputText id="trocopara" value="#{pedidoBean.pedido.trocoPara}"
                        placeholder="R$ 0,00"
                        rendered="#{not pedidoBean.pedido.isBloqueado()}">
                        <f:convertNumber type="currency" currencySymbol="R$" />
                    </p:inputText>
                    <h:outputText value="#{pedidoBean.pedido.trocoPara}"
                        rendered="#{pedidoBean.pedido.isBloqueado()}">
                        <f:convertNumber type="currency" currencySymbol="R$" />
                    </h:outputText>
                </p:panelGrid>
                <p:commandButton action="#{pedidoBean.gravaPedido}" id="botaoGravar"
                    value="#{pedidoBean.ehNovoPedido()? 'Gravar':'Atualizar'}"
                    icon="fa fa-save" rendered="#{not pedidoBean.pedido.isBloqueado()}"
                    disabled="#{not pedidoBean.prontoParaGravar}"
                    styleClass="botaosalvar" />

                <p:commandButton action="#{pedidoBean.imprimirPedido}"
                    value="Imprimir" icon="fa fa-print" styleClass="botaosearch"
                    rendered="#{not empty pedidoBean.pedido.idPedido and pedidoBean.temImpressoraLigada()}" />
            </p:panel>
        </h:form>

        <p:panel id="toggleable" header="Pedidos Pendentes" toggleable="true"
            closable="false" collapsed="#{pedidoBean.pedidoAberto}"
            toggleSpeed="500" closeSpeed="500" widgetVar="panel">
            <h:form id="pFormPendentes">
                <p:growl autoUpdate="true" id="successGrowl" for="successGrowl" />
                <p:dataTable value="#{pendentesBean.pedidosPendentes}" var="p"
                    binding="#{pedidoBean.tabelaPendentes}"
                    emptyMessage="Não há pedidos a listar" id="pTablePendentes"
                    rowStyleClass="#{p.status}">

                    <p:column headerText="Número">
                    #{p.idPedido}
                </p:column>

                    <p:column headerText="Cliente">
                    #{p.cliente.nome}
                </p:column>

                    <p:column headerText="Itens" rendered="false">
                        <ui:repeat value="#{p.itens}" var="item">
                            <h:outputText
                                value="#{item.quantidadePedida} x #{item.produto.nomeProduto} #{item.produto.tamanho} = " />
                            <h:outputText value="#{item.total}">
                                <f:convertNumber type="currency" />
                            </h:outputText>
                            <br></br>
                        </ui:repeat>
                        <hr></hr>
                        <h:outputText value="#{p.totalPedido}">
                            <f:convertNumber type="currency" />
                        </h:outputText>

                    </p:column>
                    <p:column headerText="Hora">
                        <h:outputText value="#{p.dataHoraPedido.time}">
                            <f:convertDateTime pattern="dd/MM - hh:mm"
                                timeZone="America/Sao_Paulo" />
                        </h:outputText>

                    </p:column>
                    <p:column headerText="Status">
                        <h:outputText value="" styleClass="fa fa-cogs pendenteicon"
                            rendered="#{p.taEmProducao()}" />
                        <h:outputText value="" styleClass="fa fa-list-ol pendenteicon"
                            rendered="#{p.taNaFila()}" />
                        <h:outputText value="" styleClass="fa fa-motorcycle pendenteicon"
                            rendered="#{p.taSaiu()}" />



                        <h:outputText value="#{p.status.toString()}" />
                    </p:column>

                    <p:column headerText="Ações">
                        <p:panelGrid styleClass="semborda" columns="3">
                            <p:row>
                                <p:column styleClass="semborda">
                                    <p:commandButton icon="fa fa-edit" title="Editar"
                                        actionListener="#{pedidoBean.botaPraEdicao()}" update="@all" />

                                    <p:commandButton actionListener="#{pedidoBean.mudarStatus()}"
                                        icon="fa fa-list-ol" title="Colocar na fila para entrega"
                                        rendered="#{p.taEmProducao()}"
                                        update="pFormPendentes:pTablePendentes formPedido">
                                    </p:commandButton>

                                    <p:commandButton actionListener="#{pedidoBean.mudarStatus()}"
                                        icon="fa fa-motorcycle" title="Saiu para entrega"
                                        rendered="#{p.taNaFila()}"
                                        update="pFormPendentes:pTablePendentes formPedido">
                                    </p:commandButton>

                                    <p:commandButton actionListener="#{pedidoBean.mudarStatus()}"
                                        icon="fa fa-check-square-o" title="Foi entregue"
                                        rendered="#{p.taSaiu()}"
                                        update="pFormPendentes:pTablePendentes formPedido">
                                    </p:commandButton>
                                    <p:commandButton
                                        actionListener="#{pedidoBean.cancelaPedidoExistente()}"
                                        icon="ui-icon-close" title="Cancelar"
                                        update="pFormPendentes:pTablePendentes formPedido">
                                    </p:commandButton>
                                </p:column>
                            </p:row>
                        </p:panelGrid>
                    </p:column>
                </p:dataTable>
            </h:form>
        </p:panel>

    </ui:define>
</ui:composition>
</html>

========================/VIEW========================

=================STACK=================

Error processing request Context Path: /Entregas

Servlet Path: /atendente/pedido.xhtml

Path Info: null

Query String: null

Stack Trace javax.servlet.ServletException: A ID de componente formPedido:tabelaItensPedido:j_idt42 já foi encontrada na visualização. javax.faces.webapp.FacesServlet.service(FacesServlet.java:671) io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85) io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78) io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131) io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57) io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46) io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64) io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60) io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77) io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50) io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43) io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61) io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:284) io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:263) io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81) io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:174) io.undertow.server.Connectors.executeRootHandler(Connectors.java:202) io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:793) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) java.lang.Thread.run(Thread.java:745)

Fiz uns testes colocando o form dentro do panel e vice-versa mas não tive sucesso.

Oi Rafael, dentro da tabela tabelaItensPedidodá para cada componente uma id explicita.

eu diria que é bug, mas tenta primeiro que eu falei.

abs

Aparentemente, o BINDING na dataTable causa esse erro. Tirei esse atributo e passei o Id como argumento para a função e o problema foi resolvido.

http://stackoverflow.com/questions/2101755/binding-attribute-causes-duplicate-component-id-found-in-the-view