Olá
Eu sou novo na programação Java e JSF +HTML e tô com dificuldade pra alterar dados em uma agenda simples
Meu xhtml
<?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:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:head>
<link rel="stylesheet" href="#{facesContext.externalContext.requestContextPath}/estilos.css" />
<script type="text/javascript" src="/jquery-1.12.3.js"></script>
<script type="text/javascript" src="/jquery.maskedinput"></script>
<title>Agenda</title>
</h:head>
<h:body>
<h2>Novo Contato </h2>
<h:form id="form">
<p:panelGrid columns="2" class="formulario" >
<h:outputText value="Nome "/>
<p:inputText id="nome" value="#{contatosController.contatos.nome}" maxlength="80" required="true" requiredMessage="Campo nome obrigatorio"/>
<h:outputText value="Email "/>
<p:inputText id="email" value="#{contatosController.contatos.email}" maxlength="80" required="true" requiredMessage="Campo email obrigatorio"/>
<h:outputText value="Telefone "/>
<p:inputMask id="telefone" value="#{contatosController.contatos.telefone}" required="true" requiredMessage="Campo telefone obrigatorio" mask="(99) 9999-9999"/>
<h:outputText value="Cidade "/>
<p:inputText id="cidade" value="#{contatosController.contatos.cidade}" maxlength="40" required="true" requiredMessage="Campo cidade obrigatorio" />
</p:panelGrid>
<h:commandButton class="botao" value="Salvar" id="salvar" actionListener="#{contatosController.adicionar(actionEvent)}"/>
</h:form>
<h:form id="tabela">
<p:dataTable id="contatos" value="#{contatosController.listaContatos}" class="exibicao" var="contatos">
<p:column>
<f:facet name="header">
<h:outputText value="Nome"/>
</f:facet>
<h:outputText value="#{contatos.nome}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="E-mail"/>
</f:facet>
<h:outputText value="#{contatos.email}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Telefone"/>
</f:facet>
<h:outputText value="#{contatos.telefone}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Cidade"/>
</f:facet>
<h:outputText value="#{contatos.cidade}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Excluir"/>
</f:facet>
<p:commandLink value="Alterar" **update="panelAlterar"** onclick="alterar.show()" immediate="true" >
<f:setPropertyActionListener target="#{contatosController.listaContatos}" value="#{contatos}" />
</p:commandLink>
</p:column>
</p:dataTable>
</h:form>
<h:form id="formAlterar">
<p:dialog id="mudar" header="Alterar" widgetVar="alterar" modal="true">
<p:panelGrid id="panelAlterar" columns="2">
<h:outputText value="Nome:" />
<p:inputText value="#{contatosController.contatos.nome}" />
<h:outputText value="Email:" />
<p:inputText value="#{contatosController.contatos.email}" />
<h:outputText value="Telefone:" />
<p:inputText value="#{contatosController.contatos.telefone}" />
<h:outputText value="Cidade:" />
<p:inputText value="#{contatosController.contatos.cidade}" />
</p:panelGrid>
<p:commandButton value="Alterar"
actionListener="#{contatosController.alterar}"
update="tabela:contatos"
oncomplete="alterar.hide()" />
</p:dialog>
</h:form>
</h:body>
</html>
A minha intenção é pegar os dados da datatable e jogar no form quando for alterar. Mas aparece o seguinte erro
Cannot find component for expression "panelAlterar" referenced from "tabela:contatos:0:j_idt26"
já tentei
update="formAlterar"
update= "formAlterar:mudar"
sem sucesso
É provável que eu não esteja conseguindo mapear corretamente então peço encarecidamente ajuda com esse erro, ou sugestões pra conseguir alterar de uma maneira diferente