[RESOLVIDO] Update em Ajax com Primefaces

8 respostas
T

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..

<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>

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

Grato.

8 Respostas

A

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?

T

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.

marlonmca

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:

T

Ngm ?? :shock:

A

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

G

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

T
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

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..

<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>
T

Galera.. obrigado pela ajuda de todos.

Resolvi o problema, o fato estava no , no qual o dialog estava inserido no mesmo form do cadastro.
Isolei eles e resolvido o problema..

Ficou + - assim..

<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  -->

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..

Criado 9 de julho de 2011
Ultima resposta 13 de jul. de 2011
Respostas 8
Participantes 4