[RESOLVIDO] Update em Ajax com Primefaces

Daew pessoal…

Estou fazendo um cadastro de paciente, no qual tenho um botão “Localizar” que abre um Dialog
efetuando a busca e a ideia é trazer o registro do paciente de volta pra tela de cadastro.

Ou seja. cadastro -> localizar -> dialog -> cadastro.

O problema é que efetuando a busca, 2 ou 3vezes o dialog abre varias instancias de pesquisas, uma sobreposta a outra.

Acredito que a falha esta relacionada a algum Update… Estou usando ViewScoped

Código…

[code]<ui:composition
xmlns:ui=“http://java.sun.com/jsf/facelets
xmlns:h=“http://java.sun.com/jsf/html
xmlns:f=“http://java.sun.com/jsf/core
xmlns:p=“http://primefaces.prime.com.tr/ui
template="/templates/template.xhtml">

<ui:define name="title">#{msg.tituloPaciente}</ui:define>
<ui:define name="tituloConteudo">#{msg.tituloPaciente}</ui:define>
<ui:define name="content">

<h:form id="formGeral">
	<p:panel header="Novo Paciente." style="width:80%; margin: 5% 10%;" >  
			
		<h:panelGrid id="painelGrid" columns="5" cellpadding="10" >
			<p:commandButton value="Localizar" oncomplete="localizar.show()" cellpadding="5"/>  
		</h:panelGrid>
			
		<h:form id="formCadastro">
			 <h:outputText value="Nome:" />  
			 <p:inputText id="Nome" value="#{pacienteMB.paciente.nom_paciente}" />  
			 <h:outputText value="CPF:" />  
			 <p:inputMask id="Cpf" value="#{pacienteMB.paciente.cpf_paciente}" mask="999-999-999-99" />  
		</h:form>	
		
	</p:panel>
	
	
	
	<!-- FORM PESQUISA  -->
	<p:dialog id="dialog" header="Localizar Paciente:" widgetVar="localizar" modal="true" 
		width="800" height="400"  showEffect="fade" >  
			
			<p:dataTable id="tbPaciente" value="#{pacienteMB.listaPacientes}" 
				var="paciente" border="1" cellspacing="0">
		
				<p:column>
					<f:facet name="header">
						<h:outputText value="Código" />
					</f:facet>
					<h:outputText value="#{paciente.cod_paciente}" />
				</p:column>

				<p:column>
					<f:facet name="header">
						<h:outputText value="Nome" />
					</f:facet>
					<h:outputText value="#{paciente.nom_paciente}" />
				</p:column>
			
				
				<p:column style="width:50px">  
					<p:commandButton update="formGeral" action="#{pacienteMB.editar(paciente)}"
					 oncomplete="localizar.hide()"
					 image="ui-icon ui-icon-pencil" style="width:28px;height:28px" title="Edit"/>  
			   	</p:column>  

			</p:dataTable>
	</p:dialog>     
	<!-- FORM PESQUISA  -->

			
</h:form>
   			

</ui:define>

</ui:composition>[/code]

Limpei a tela, deixando mais limpo possivel para identificar o problema.
Qualquer ajuda é bem vinda.

Grato.

Quero entender seu problema:

1 - Você clica no botão “Localizar” abre um pop-up onde passa parâmetros para flitrar dados e pode aparecer
mais de um paciente daí você deve escolher um e será aplicado na tela… É isso? Daí o problema ocorre se após terminar
você fazer isso de novo… É isso?

Olá andre.

é isso mesmo, o dialog exibe uma lista de paciente, aonde eu seleciono um “Edit” e ele carrega para a tela de cadastro fechando o dialog.
o problema acontece na segunda chamada em diante, ele abre várias dialogs ao mesmo tempo, uma sobreposta a outra.

Estou com um o mesmo problema. Quando eu gravo a primeira vez um formulário que está em um p:dialog consigo normalmente. Daí se eu mandar fazer um update no painel dentro do dialog não consigo mais enviar o formulário com valores ai grava um registro vazio e se eu der um update no form fora do dialog quando eu abro o dialog novamente aparecem dois dialogs e o formulário não submete mais.

Se alguém achar a solução manda aê.

:slight_smile:

Ngm ?? :shock:

Apenas um teste: Tentou mudar o escopo de sessão? Caso sim, surtiu algum efeito? Pode postar o seu ManagedBean?

tenta alterar essa:

<p:commandButton value="Localizar" oncomplete="localizar.show()" cellpadding="5"/> 

para

<p:commandButton value="Localizar" oncomplete="localizar.show()" cellpadding="5" update="tbPaciente"/>    

e essa chamada

<p:commandButton update="formGeral" action="#{pacienteMB.editar(paciente)}"  oncomplete="localizar.hide()"  image="ui-icon ui-icon-pencil" style="width:28px;height:28px" title="Edit"/>  

para

<p:commandButton update="formGeral" action="#{pacienteMB.editar(paciente)}"  oncomplete="localizar.hide()"  image="ui-icon ui-icon-pencil" style="width:28px;height:28px" title="Edit" update="formCadastro"/>  

ve se da certo assim

[quote=grsouza]tenta alterar essa:

<p:commandButton value="Localizar" oncomplete="localizar.show()" cellpadding="5"/> 

para

<p:commandButton value="Localizar" oncomplete="localizar.show()" cellpadding="5" update="tbPaciente"/>    

e essa chamada

<p:commandButton update="formGeral" action="#{pacienteMB.editar(paciente)}"  oncomplete="localizar.hide()"  image="ui-icon ui-icon-pencil" style="width:28px;height:28px" title="Edit"/>  

para

<p:commandButton update="formGeral" action="#{pacienteMB.editar(paciente)}"  oncomplete="localizar.hide()"  image="ui-icon ui-icon-pencil" style="width:28px;height:28px" title="Edit" update="formCadastro"/>  

ve se da certo assim[/quote]

opa grsouza.

entao, mudei os comandos como vc passou, e quando mudo o update do Editar de ’ update=“formGeral” ’ para ’ update=“formCadastro” ’ ele nao atualiza mais os dados no formulario de cadastro na volta…

Segue o codigo como ficou…

[code] <ui:composition
xmlns:ui=“http://java.sun.com/jsf/facelets
xmlns:h=“http://java.sun.com/jsf/html
xmlns:f=“http://java.sun.com/jsf/core
xmlns:p=“http://primefaces.prime.com.tr/ui
template="/templates/template.xhtml">

    <ui:define name="title">#{msg.tituloPaciente}</ui:define>  
    <ui:define name="tituloConteudo">#{msg.tituloPaciente}</ui:define>  
    <ui:define name="content">  
      
    <h:form id="formGeral">  
        <p:panel header="Novo Paciente." style="width:80%; margin: 5% 10%;" >    
                  
            <h:panelGrid id="painelGrid" columns="5" cellpadding="10" >  
                <p:commandButton value="Localizar" oncomplete="localizar.show()" immediate="true" 
                update="tbPaciente" cellpadding="5"/>    
            </h:panelGrid>  
                  
            <h:form id="formCadastro">  
                 <h:outputText value="Nome:" />    
                 <p:inputText id="Nome" value="#{pacienteMB.paciente.nom_paciente}" />    
                 <h:outputText value="CPF:" />    
                 <p:inputMask id="Cpf" value="#{pacienteMB.paciente.cpf_paciente}" mask="999-999-999-99" />    
            </h:form>   
              
        </p:panel>  
          
          
          
        <!-- FORM PESQUISA  -->  
        <p:dialog id="dialog" header="Localizar Paciente:" widgetVar="localizar" modal="true"   
            width="800" height="400"  showEffect="fade" >    
                  
                <p:dataTable id="tbPaciente" value="#{pacienteMB.listaPacientes}"   
                    var="paciente" border="1" cellspacing="0">  
              
                    <p:column>  
                        <f:facet name="header">  
                            <h:outputText value="Código" />  
                        </f:facet>  
                        <h:outputText value="#{paciente.cod_paciente}" />  
                    </p:column>  
  
                    <p:column>  
                        <f:facet name="header">  
                            <h:outputText value="Nome" />  
                        </f:facet>  
                        <h:outputText value="#{paciente.nom_paciente}" />  
                    </p:column>  
                  
                      
                    <p:column style="width:50px">    
                        <p:commandButton  action="#{pacienteMB.editar(paciente)}"  
                         oncomplete="localizar.hide()" update="formGeral"
                         image="ui-icon ui-icon-pencil" style="width:28px;height:28px" title="Edit"/>    
                    </p:column>    
  
                </p:dataTable>  
        </p:dialog>       
        <!-- FORM PESQUISA  -->  
  
                  
    </h:form>  
                  
  
    </ui:define>  
  
      
</ui:composition>  [/code]

Galera… obrigado pela ajuda de todos.

Resolvi o problema, o fato estava no <h:form>, no qual o dialog estava inserido no mesmo form do cadastro.
Isolei eles e resolvido o problema…

Ficou + - assim…

[code] <h:form id=“formGeral”>
<p:panel header=“Novo Paciente.” style=“width:80%; margin: 5% 10%;” >

            <h:panelGrid id="painelGrid" columns="5" cellpadding="10" >  
                <p:commandButton value="Localizar" oncomplete="localizar.show()" immediate="true" 
                update="tbPaciente" cellpadding="5"/>    
            </h:panelGrid>  
                  
            <h:form id="formCadastro">  
                <h:panelGrid columns="4" cellpadding="5" >
                   <h:outputText value="Nome:" />    
                   <p:inputText id="Nome" value="#{pacienteMB.paciente.nom_paciente}" />    
                   <h:outputText value="CPF:" />    
                   <p:inputMask id="Cpf" value="#{pacienteMB.paciente.cpf_paciente}" mask="999-999-999-99" />    
                 </h:panelGrid>
            </h:form>   
              
        </p:panel>  
      </h:form>    
          
          
        <!-- PESQUISA  -->  
        <p:dialog id="dialog" header="Localizar Paciente:" widgetVar="localizar" modal="true"   
            width="800" height="400" showEffect="fade" >    
               <h:form id="formDialog">    
                	<p:dataTable id="tbPaciente" value="#{pacienteMB.listaPacientes}" 
                	var="paciente" border="1" cellspacing="0">
		
				<p:column>
					<f:facet name="header">
						<h:outputText value="Código" />
					</f:facet>
					<h:outputText value="#{paciente.cod_paciente}" />
				</p:column>

				<p:column>
					<f:facet name="header">
						<h:outputText value="Nome" />
					</f:facet>
					<h:outputText value="#{paciente.nom_paciente}" />
				</p:column>
			
				
				<p:column style="width:50px">  
					<p:commandButton id="editar" action="#{pacienteMB.editar(paciente)}" update="formGeral"
					 oncomplete="localizar.hide()" image="ui-icon ui-icon-pencil" style="width:28px;height:28px" title="Edit"/>  
			   	</p:column>  

			</p:dataTable>
               </h:form>
        </p:dialog>       
        <!-- PESQUISA  -->  [/code]

Basicamente a solução consiste em separar os blocos da pesquisa do formulário com um form…

Fica a dica para os proximos ai. Obrigado a todos…