Cannot find component with expression[RESOLVIDO]

Olá pessoal. Li todos os tópicos referidos ao tema em questão, porém nenhum deles resolveu meu problema. Estou usando o PrimeFaces e o problema ocorre quando tento atualizar os campos de cadastro ao abrir um formulário ou quando salvo as informações. Usei os IDs para identificar o form e o panelGrid, onde estão os campos de cadastro:

<h:form id=“formCadastro”>
<h:panelGrid id=“painel” columns=“2”>
<p:outputLabel value=“Código” />
<p:inputText maxlength=“10” size=“10” value="#{instituicaoBean.instituicao.codigo}"/>
(demais campos ocultados)
</h:panelGrid>
</h:form>

Botão para abrir o formulário:
<p:commandButton value=“Nova Instituição"
oncomplete=“PF(‘dialogo_cadastrar’).show();“
actionListener=”#{instituicaoBean.novo}” process=”@this"
update=":formCadastro:painel"
/>

Erro: Cannot find component for expression “:formCadastro:painel” referenced from “j_idt35:j_idt38”.

Obs.: A aplicação está salvando as informações no BD e listando em um dataTable normalmente quando removo o update do commandButton.

PrimeFaces versão: 6.2

Obrigado pelo apoio.

Se bem me lembro, caso o botão em questão esteja fora do h:form, ele não irá encontrar o id painel, por isso o erro.

Olá darlan_machado. Neste caso não tenho como utilizar dentro do form, pois a ação do botão é abrir um p:dialog, onde contém os campos de cadastro.

Porém, dentro do form do dialog, tenho yum botão Salvar que também inserir update para limpar os campos, mas sem êxito, pois apresenta o mesmo problema.

Obrigado por seu apoio.

Tem sim,

Coloca o botão dentro do form e adiciona o atributo process="@this"

Quando você faz uma requisição, toda a página vai junto, quando você usa o atributo process você decide o que quer enviar na requisição, no caso os campos serão ignorados.

Olá Mike. Neste caso não tenho como utilizar dentro do form, pois a ação do botão é abrir um p:dialog, onde contém os campos de cadastro.

Dentro do form tenho um botão Salvar que inserir o update para apresentar uma mensagem ao usuário, quando salvo as informações no BD. Se acrescentar “:formCadastro:painel” nele, passa a ocorrer o erro.

O form esta dentro de um dialog. O botão é para abrir este dialog:
Postando o código completo:

<?xml version="1.0" encoding="ISO-8859-1" ?>

<ui:composition 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"
template=”/template/template.xhtml”>

<ui:define name="conteudo">

	<h:form>

		<p:messages id="mensagem" />
		<p:panel header="Cadastro de Instituições Financeiras">

			<!-- Botão de cadastros -->
			<h3>
				<p:commandButton value="Nova Instituição"
					oncomplete="PF('dialogo_cadastrar').show();"
					actionListener="#{instituicaoBean.novo}" process="@this" 
					update=":formCadastro:painel" 
					 />
				<!-- update="@(form)" -->
			</h3>


			<!-- Caixa de Diálogo cadastros -->
			<p:dialog id="dialogo" header="Instituição - Cadastro"
				widgetVar="dialogo_cadastrar" draggable="false" resizable="false"
				modal="true" closable="false">

				<h:form id="formCadastro">
					<h4>
						<h:panelGrid id="painel" columns="2">
							<p:outputLabel value="Código" />
							<p:inputText maxlength="10" size="10"
								value="#{instituicaoBean.instituicao.codigo}" />

							<p:outputLabel value="Nome da Instituição" />
							<p:inputText maxlength="50" size="55"
								value="#{instituicaoBean.instituicao.nome}" />

							<p:outputLabel value="Ativo" />
							<p:selectBooleanCheckbox
								value="#{instituicaoBean.instituicao.ativo}" />

						</h:panelGrid>

						<h:panelGrid columns="3">
							<p:commandButton value="Salvar"
								actionListener="#{instituicaoBean.salvar}"
								update=":mensagem" />
							<p:commandButton value="Fechar"
								oncomplete="PF('dialogo_cadastrar').hide()" />
						</h:panelGrid>

					</h4>
				</h:form>


			</p:dialog>

			<!-- Painel de registros -->
			<h1>
				<p:dataTable emptyMessage="Nenhum registro localizado."
					paginator="true" value="#{instituicaoBean.instituicoes}">
					<p:column headerText="ID">
					</p:column>

					<p:column headerText="Código">
					</p:column>

					<p:column headerText="Nome da Instituição">
					</p:column>

				</p:dataTable>
			</h1>

		</p:panel>

	</h:form>

</ui:define>

</ui:composition>

Coloca o dialog fora do form

Dois form um dentro do outro da problema

Mike, é isso mesmo. Coloquei o Dialog fora do form e obtive êxito. Muito obrigado. Abs.

:+1: Postando o código todo sempre fica mais fácil.

Se o problema foi resolvido, considere marcar a minha resposta como Solução e coloca [RESOLVIDO] no nome do tópico.