Solucionado (ver solução)
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

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