Update em componente fora do mesmo form - JSF + PrimeFaces [RESOLVIDO]

E aí meus amigos, como vão?

Seguinte galera, estou com um problema quanto a atualizar alguns componentes da minha página.
Vou exemplificar com um códigozinho:

<h:form id="formulario">
<p:inputText id="txtNome" value="#{pessoaMB.nomePessoa}" />
<p:inputText id="txtIdade"v alue="#{pessoaMB.idadePessoa}" />
<p:commandButton action="#{pessoaMB.salvarDados}" value="Salvar" />
</h:form>

<h:form id="formTable">
<p:dataTable value="#{pessoaaMB.exibirTodas}" var="table">
<p:column header="Nome" value="table.nomePessoa" />
<p:column header="Idade" value="table.idadePessoa" />
<p:dataTable>
</h:form>

Bem simples o código, mas é só pra ser visível.

Bem, o meu problema é:
Quando clico em “Salvar”, ele salva os dados do formulário no banco Toda vez que eu adicionar uma nova pessoa no banco.
Porém, para que essa nova pessoa apareça no dataTable, eu tenho que atualizar toda a página. E o que eu queria era que no momento que eu clicasse em “Salvar”,
ele atualizasse o dataTable (via ajax eu suponho) para ficar visível ao usuário.
Se eu colocar o id do dataTable na propriedade “update” do commandButton, vai dar um erro, pois ele não encontra o id =/

Podem me ajudar galera, é para o meu TCC :s

[]'s

Olá amigo,

Quando o componente está em outro form você tem que referencia-lo usando “:”, então nesse caso você colocaria:


<h:form id="formulario">  
<p:inputText id="txtNome" value="#{pessoaMB.nomePessoa}" />  
<p:inputText id="txtIdade"v alue="#{pessoaMB.idadePessoa}" />  
<p:commandButton action="#{pessoaMB.salvarDados}" value="Salvar" update=":formTable"/>  
</h:form>  
  
<h:form id="formTable">  
<p:dataTable value="#{pessoaaMB.exibirTodas}" var="table">  
<p:column header="Nome" value="table.nomePessoa" />  
<p:column header="Idade" value="table.idadePessoa" />  
<p:dataTable>  
</h:form>  

ou se vc quiser só atualizar o dataTable


<h:form id="formulario">  
<p:inputText id="txtNome" value="#{pessoaMB.nomePessoa}" />  
<p:inputText id="txtIdade"v alue="#{pessoaMB.idadePessoa}" />  
<p:commandButton action="#{pessoaMB.salvarDados}" value="Salvar" update=":formTable:table"/>  
</h:form>  
  
<h:form id="formTable">  
<p:dataTable id="table" value="#{pessoaaMB.exibirTodas}" var="table">  
<p:column header="Nome" value="table.nomePessoa" />  
<p:column header="Idade" value="table.idadePessoa" />  
<p:dataTable>  
</h:form>  
2 curtidas

Como o dataTable e o botão que gera a ação estão em forms diferentes, você tem que passar o path completo do compoenente. Pelo que vejo da página, deveria ser assim:

:formTable:idDataTable
2 curtidas

Fala galera!

Pq não colocar:

update="@all"

Assim atualizaria tudo.
Acredito que queira limpar os campos depois de submetido, não?

[]'s

Julianno

Pode ser que existam componentes que não devam ser atualizados. Além disso, deve-se minimizar a quantidade de componentes atualizados para diminuir o overhead da atualização após a requisição ajax.

O @all vai funcionar, mas eu não sei no caso dele se ele quer que atualize tudo, pois pelo que entendi ele só quer atualizar a dataTable, o que ficaria muito mais agradável visualmente para o usuário do sistema.

Olhe no HTML o ID que está sendo gerado e coloque o ID por completo.

FUNCIONOU 100%!!

Apenas coloquei o path completo do componente, e funcionou perfeitamente!
Obrigado a viniciusjssouza e gustavo_souza(), vocês dois deram respostas parecidas e muito úteis!

Obrigado a todos que responderam :smiley:

[]'s

Olá RedBandog estou com um caso parecido mas minha dataTable: <p:dataTable id="dataTable" var="linha" value="#{area.listaAreas}" editable="true" draggableColumns="true" style="margin-bottom:20px" resizableColumns="true" rendered="#{not empty area.listaAreas}" widgetVar="tableArea" filteredValue="#{area.filteredArea}" emptyMessage="Não existem registros." liveResize="true" > .... não esta atualizando… poderia postar o seu código após o ajuste que ficou 100%?

Abraços!