Problema com o dialog / update do primefaces

9 respostas
R

eu tenho uma página que ao clicar em um menu, chama um dialog.
neste dialog eu tenho um botão de salvar:

p:commandButton value="Salvar" disabled="#{solicitacoesBean.desativar}" action="#{solicitacoesBean.salvar}" oncomplete="dialogSolicitacao.hide()" update="growl, formPaginaToda, tbl" >

este botão fecha o meu dialog, e da update no growl, no form dentro do próprio dialog(uso isso pra limpar os campos após limpar o objeto no bean) e tbl é uma tabela da página que chama o dialog (serve pra atualizar com o novo registro gravado).

Quando entro pela primeira vez, tudo funciona normalmente, quando tento salvar pela segunda vez, ele já não funciona mais nada, não da os updates, etc…
onde to me perdendo?

9 Respostas

F

apos efeturar um novo cadastro vc esta criando um novo objeto???
pode ser que vc esta deixando o mesmo objeto ou ateh mesmo deixando ele null…

flws

A

Lança o seu dialog (sem utilizar a tag form) dentro do formulário onde você está realizando a chamada dele. Se uma vez ele funciona, depois de adicioná-lo ao seu form e você der um update neste mesmo form, ele voltará a funcionar sem problemas.

R

frankwco:
apos efeturar um novo cadastro vc esta criando um novo objeto???
pode ser que vc esta deixando o mesmo objeto ou ateh mesmo deixando ele null…

flws

sim, toda vez que o usuario salva(cria) um novo cadastro, no próprio método de salvar eu já crio um novo objeto tanto dos pais, quanto dos filhos…

R
andre.froes:
Lança o seu dialog (sem utilizar a tag form) dentro do formulário onde você está realizando a chamada dele. Se uma vez ele funciona, depois de adicioná-lo ao seu form e você der um update neste mesmo form, ele voltará a funcionar sem problemas.

cara, fiz desse jeito que você falou e continua sem funcionar..
se liga:

<h:form prependId="false" id="teste55">
			<p:menubar autoSubmenuDisplay="false" styleClass="menuBar">  
				<p:submenu label="Solicitação" id="solicitacao" icon="ui-icon ui-icon-document">  
			    	<p:submenu label="Incluir" icon="ui-icon ui-icon-contact">  
			        	<p:menuitem value="Efetivação" onstart="dialogSolicitacao.show()" update="tbl, growl"  />  
			            <p:menuitem value="Levantamento" url="#" />  
			        </p:submenu>
			        <p:submenu label="Consultar" icon="ui-icon ui-icon-contact">  
			           	<p:menuitem value="Efetivação" url="listaSolicitacaoEfet.xhtml"/>  
			            <p:menuitem value="Levantamento" url="#"/>  
			       	</p:submenu>  
			  	</p:submenu>  
			   
			  	<p:submenu label="Efetivação" icon="ui-icon ui-icon-pencil">
			    	<p:menuitem value="Consultar" url="listaEfetivacoes.xhtml" onclick="statusDialog.show()" 
						onsuccess="statusDialog.hide()" />  
			    </p:submenu>  
			   
			    <p:submenu label="Levantamento" icon="ui-icon ui-icon-pencil">  
			        <p:menuitem value="Consultar" url="#" />
			    </p:submenu> 
			</p:menubar>
			
			
			
			
			
			
			
			
			<p:dialog widgetVar="dialogSolicitacao" id="dlgsolicitacao" header="Solicitação" modal="true" showEffect="clip" 
		hideEffect="clip" minWidth="800">

	<div id="conteudo23232" width="1008">
		
			 <p:tabView>
			 
			 				 	
				<p:tab title="Documentos" id="ptabDocumentos"> 
				
					<h:outputLabel value="Arquivo:     " styleClass="Negrito"/>
						<p:fileUpload  fileUploadListener="#{solicitacoesBean.upload}"
							label="Selecionar..." allowTypes="*.pdf;" description=".pdf"
							auto="true" multiple="false" customUI="true" />
					<br></br>
					&lt;h:outputLabel value="Tipo de Arquivo:&emsp;" styleClass="Negrito"/&gt;
					&lt;h:inputText disabled="#{solicitacoesBean.desativar}" id="tp_Arquivo222" value="#{solicitacoesBean.anexo1.tipo}" maxlength="15"/&gt;
					<br/><br/>
					&lt;h:outputLabel&gt;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&lt;/h:outputLabel&gt;
					&lt;p:commandButton disabled="#{solicitacoesBean.desativar}" value="Adiciona" action="#{solicitacoesBean.salvarAnexo}" update="tp_Arquivo222, tabelaAnexos2232"/&gt; 
					<br/><br/>
					
					
					&lt;p:dataTable id="tabelaAnexos2232" value="#{solicitacoesBean.solicitacaoAnexoLista}"
						var="anexoLista1" emptyMessage="Registro não encontrado."&gt;

						&lt;p:column&gt;
							&lt;f:facet name="header"&gt;
								&lt;h:outputText value="Tipo" /&gt;
							&lt;/f:facet&gt;
							&lt;h:outputText value="#{anexoLista1.tipo}" /&gt;
						&lt;/p:column&gt;
						
						&lt;p:column&gt;
							&lt;f:facet name="header"&gt;
								&lt;h:outputText value="Data" /&gt;
							&lt;/f:facet&gt;
							&lt;h:outputText value="#{anexoLista1.data}" /&gt;
						&lt;/p:column&gt;
						
						&lt;p:column&gt;
							&lt;f:facet name="header"&gt;
								&lt;h:outputText value="Matrícula" /&gt;
							&lt;/f:facet&gt;
							&lt;h:outputText value="#{anexoLista1.matricula}" /&gt;
						&lt;/p:column&gt;

						&lt;p:column&gt;
							&lt;f:facet name="header"&gt;
								&lt;h:outputText value="Arquivo" /&gt;
							&lt;/f:facet&gt;

							&lt;h:outputLink value="#{'arqs/solicitEfetivacao/'}#{anexoLista1.nome}"
								target="_blank"&gt;#{anexoLista1.nome}&lt;/h:outputLink&gt;
						&lt;/p:column&gt;
					&lt;/p:dataTable&gt;			
				<br/>					
				&lt;/p:tab&gt;
				
				&lt;p:tab title="Parecer" id="ptabParecer"&gt;
				&lt;h:inputTextarea disabled="#{solicitacoesBean.desativar}" id="PARECER" value="#{solicitacoesBean.objParecer}" style="width:955px;" /&gt;
				<br/><br/>
				&lt;p:dataTable id="tabelaParecer2232" value="#{solicitacoesBean.parecerLista}"
						var="parecerLista1" emptyMessage="Nenhum parecer cadastrado."&gt;

						&lt;p:column&gt;
							&lt;f:facet name="header"&gt;
								&lt;h:outputText value="Data" /&gt;
							&lt;/f:facet&gt;
							&lt;h:outputText value="#{parecerLista1.data}" /&gt;
						&lt;/p:column&gt;

						&lt;p:column&gt;
							&lt;f:facet name="header"&gt;
								&lt;h:outputText value="Matrícula" /&gt;
							&lt;/f:facet&gt;
							&lt;h:outputText value="#{parecerLista1.matricula}" /&gt;
						&lt;/p:column&gt;
						
						&lt;p:column&gt;
							&lt;f:facet name="header"&gt;
								&lt;h:outputText value="Parecer" /&gt;
							&lt;/f:facet&gt;
							&lt;h:outputText value="#{parecerLista1.parecer}" /&gt;
						&lt;/p:column&gt;
						
					&lt;/p:dataTable&gt;
					
				&lt;/p:tab&gt;
				
				&lt;p:tab title="Dados Gerais"&gt;
							
					&lt;h:outputLabel  value="BBJUR" styleClass="Negrito"/&gt;
					<br/>
					&lt;h:inputText disabled="#{solicitacoesBean.desativar}" id="BBJUR" value="#{solicitacoesBean.solicitacao.bbjur}" maxlength="15" /&gt;
					
					&lt;!-- &lt;p:commandButton value="Testar" action="{solicitacoesBean.buscarUmBbjur}" /&gt; --&gt;
					
					<br/><br/>
					
					&lt;h:outputLabel  value="Valor" styleClass="Negrito" /&gt;
					<br/>
					&lt;h:inputText disabled="#{solicitacoesBean.desativar}" id="Valor" value="#{solicitacoesBean.solicitacao.valor}" maxlength="20" /&gt;
					<br/><br/>
					
					&lt;h:outputLabel  value="Tipo" styleClass="Negrito"/&gt;
					<br/>
					&lt;h:selectOneRadio disabled="#{solicitacoesBean.desativar}" id="RADIO_TIPO" value="#{solicitacoesBean.solicitacao.tipo}"&gt;
						&lt;f:selectItem itemLabel="Trabalhista" itemValue="Trabalhista" id="rad1" /&gt;
						&lt;f:selectItem itemLabel="Não Trabalhista" itemValue="Não Trabalhista" id="rad2" /&gt;
					&lt;/h:selectOneRadio&gt;
					<br/>
					
					&lt;h:outputLabel  value="Finalidade" styleClass="Negrito"/&gt;
					<br/>
					&lt;h:selectOneRadio disabled="#{solicitacoesBean.desativar}" id="RADIO_FINALIDADE" value="#{solicitacoesBean.solicitacao.finalidade}"&gt;
						&lt;f:selectItem itemLabel="Garantia" itemValue="Garantia" /&gt;
						&lt;f:selectItem itemLabel="Pagamento" itemValue="Pagamento" /&gt;
					&lt;/h:selectOneRadio&gt;
					<br/>
					
					&lt;h:outputLabel  value="Modalidade" styleClass="Negrito" /&gt;
					<br/>
					&lt;h:selectOneMenu disabled="#{solicitacoesBean.desativar}" value="#{solicitacoesBean.modalidade.id}"&gt;
						&lt;f:selectItems value="#{solicitacoesBean.modalidades}" var="modt"
							itemValue="#{modt.id}" itemLabel="#{modt.nome}" /&gt;
					&lt;/h:selectOneMenu&gt;
					<br/><br/>
			
				&lt;/p:tab&gt;
				
			&lt;/p:tabView&gt;
			<br/><br/>
			
			&lt;h:outputText value="Status atual: " /&gt;
			&lt;h:outputText value="#{solicitacoesBean.solicitacaoStatus.status.nomeStatus}" /&gt;<br />
			
			&lt;h:selectOneMenu disabled="#{solicitacoesBean.desativar}" value="#{solicitacoesBean.status.id}"&gt;
					&lt;f:selectItem itemLabel="Selecione..."/&gt;
					&lt;f:selectItems value="#{solicitacoesBean.listaStatus}" var="status"
						itemValue="#{status.id}" itemLabel="#{status.nomeOpcao}" /&gt;
						&lt;f:ajax event="change" listener="#{solicitacoesBean.selecionaOpcao}" render="slDependencias" /&gt;
				&lt;/h:selectOneMenu&gt;
				<br/><br/>
			
			&lt;h:selectOneMenu id="slDependencias" 
				value="solicitacoesBean.solicitacao.prefResponsavel"&gt;
				&lt;f:selectItem itemLabel="Selecione..."/&gt;
				&lt;f:selectItems value="#{solicitacoesBean.listaDependencias}" var="relDependencias"
					itemValue="#{relDependencias.prefixo}"  
					itemLabel="#{relDependencias.prefixo} #{relDependencias.nome}" /&gt;
			&lt;/h:selectOneMenu&gt;<br /><br />
			

			&lt;h:outputLabel value="Agência Interessada" styleClass="Negrito" /&gt;<br/>
			&lt;h:inputText disabled="#{solicitacoesBean.desativar}" id="AG_INTERESSADA" value="#{solicitacoesBean.solicitacao.agInteressada}" maxlength="4"/&gt;	
			
			&lt;div id="botoes"&gt;
				&lt;p:commandButton value="Salvar" disabled="#{solicitacoesBean.desativar}" 
				action="#{solicitacoesBean.salvar}" oncomplete="dialogSolicitacao.hide()" update="growl, teste55" &gt; 
					&lt;!-- &lt;p:ajax event="click" /&gt; --&gt;
				&lt;/p:commandButton&gt;			
			&lt;/div&gt;
			
			&lt;p:growl id="growl" showDetail="false" life="30000" /&gt;
			
		
		&lt;/div&gt;
	&lt;/p:dialog&gt;
			
			
			
			
			
			
			
			
			
			
		&lt;/h:form&gt;

agora da primeira vez ele salva perfeitamente, na outra ele não consegue mais salvar.. os campos de dentro do dialog continuam com os valores da última vez..

no bean ta assim:

public void salvar() throws IOException {			
		
		
		parecerDao = new SolicitacaoParecerDAO();
		solicitacaoDao = new SolicitacoesDAO();
		parecer = new SolicitacaoParecer();
		solicitacaoStatus = new SolicitacaoStatus();
		modDao = new ModalidadesDAO();
		solicitacao.setModalidade(modDao.findById(modalidade.getId(),false));
		solicitacao.setMatricula(usuarioVO.getChave());
		solicitacao.setPrefOrigem(usuarioVO.getCodDependencia());
		
		if (objParecer!=&quot;&quot;) {
			if (objParecer.length()&gt;4) {
				if (solicitacaoAnexoLista.size()&gt;0){
					//if (status.getId()==0) {
					
						solicitacaoDao.merge(solicitacao);
						parecer.setSolicitacao(solicitacao);
						parecer.setParecer(objParecer);
						parecer.setMatricula(usuarioVO.getChave());
						teste =  modalidade.getId();
						parecerDao.makePersistent(parecer);
						
						//STATUS
						solicitacaoStatus.setSolicitacao(solicitacao);
						solicitacaoStatus.setStatus(status);
						solicitacaoStatus.setMatricula(usuarioVO.getChave());
						solicitacaoStatus.setPrefixo(usuarioVO.getCodDependencia());
						solicitacaoStatusDao.makePersistent(solicitacaoStatus);

						solicitacaoStatus = new SolicitacaoStatus();
						solicitacao.setPrefResponsavel(null);
						solicitacao = new Solicitacoes();
						parecer = new SolicitacaoParecer();
						modalidade = new Modalidades();
						status = new Status();
						solicitacaoAnexoLista = new List&lt;SolicitacaoAnexo&gt;() {
							
							@Override
							public &lt;T&gt; T[] toArray(T[] a) {
								// TODO Auto-generated method stub
								return null;
							}
							
							@Override
							public Object[] toArray() {
								// TODO Auto-generated method stub
								return null;
							}
							
							@Override
							public List&lt;SolicitacaoAnexo&gt; subList(int fromIndex, int toIndex) {
								// TODO Auto-generated method stub
								return null;
							}
							
							@Override
							public int size() {
								// TODO Auto-generated method stub
								return 0;
							}
							
							@Override
							public SolicitacaoAnexo set(int index, SolicitacaoAnexo element) {
								// TODO Auto-generated method stub
								return null;
							}
							
							@Override
							public boolean retainAll(Collection&lt;?&gt; c) {
								// TODO Auto-generated method stub
								return false;
							}
							
							@Override
							public boolean removeAll(Collection&lt;?&gt; c) {
								// TODO Auto-generated method stub
								return false;
							}
							
							@Override
							public SolicitacaoAnexo remove(int index) {
								// TODO Auto-generated method stub
								return null;
							}
							
							@Override
							public boolean remove(Object o) {
								// TODO Auto-generated method stub
								return false;
							}
							
							@Override
							public ListIterator&lt;SolicitacaoAnexo&gt; listIterator(int index) {
								// TODO Auto-generated method stub
								return null;
							}
							
							@Override
							public ListIterator&lt;SolicitacaoAnexo&gt; listIterator() {
								// TODO Auto-generated method stub
								return null;
							}
							
							@Override
							public int lastIndexOf(Object o) {
								// TODO Auto-generated method stub
								return 0;
							}
							
							@Override
							public Iterator&lt;SolicitacaoAnexo&gt; iterator() {
								// TODO Auto-generated method stub
								return null;
							}
							
							@Override
							public boolean isEmpty() {
								// TODO Auto-generated method stub
								return false;
							}
							
							@Override
							public int indexOf(Object o) {
								// TODO Auto-generated method stub
								return 0;
							}
							
							@Override
							public SolicitacaoAnexo get(int index) {
								// TODO Auto-generated method stub
								return null;
							}
							
							@Override
							public boolean containsAll(Collection&lt;?&gt; c) {
								// TODO Auto-generated method stub
								return false;
							}
							
							@Override
							public boolean contains(Object o) {
								// TODO Auto-generated method stub
								return false;
							}
							
							@Override
							public void clear() {
								// TODO Auto-generated method stub
								
							}
							
							@Override
							public boolean addAll(int index, Collection&lt;? extends SolicitacaoAnexo&gt; c) {
								// TODO Auto-generated method stub
								return false;
							}
							
							@Override
							public boolean addAll(Collection&lt;? extends SolicitacaoAnexo&gt; c) {
								// TODO Auto-generated method stub
								return false;
							}
							
							@Override
							public void add(int index, SolicitacaoAnexo element) {
								// TODO Auto-generated method stub
								
							}
							
							@Override
							public boolean add(SolicitacaoAnexo e) {
								// TODO Auto-generated method stub
								return false;
							}
						};
						objParecer = &quot;&quot;;
						FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,&quot;Solicitação salva com sucesso!&quot;,&quot;&quot;));
					
				} else {
				
					FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, &quot;Não é possível salvar sem anexo.&quot;,&quot;&quot;));	
				}
			} else {
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, &quot;Campo 'Parecer' deve ter no mínimo 5 letras.&quot;,&quot;&quot;));
			}
		} else {
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, &quot;O preenchimento do campo 'Parecer' é obrigatório&quot;,&quot;&quot;));
		}
		//colocar mensagem que a solicitação não foi salva
		
	}

eu dou um merge na solicitação, pq como o anexo é obrigatório, eu crio a solicitação na hora de salvar um anexo:

public void salvarAnexo() {
		
		if (anexo1.getNome()!=null && anexo1.getTipo()!=null){
			if (anexo1.getNome().length()&gt;0 && anexo1.getTipo().length()&gt;0 ){
				try {
					IOUtils.copy(evento.getFile().getInputstream(), new FileOutputStream(&quot;\\R_NOVO_ECLIPSE\\apache-tomcat-7.0.19\\webapps\\pdj\\WebContent\\arqs\\solicitEfetivacao\\&quot; + anexo1.getNome()));
					IOUtils.closeQuietly(evento.getFile().getInputstream());
					SolicitacaoAnexo anexoTemp = new SolicitacaoAnexo();
					anexoTemp.setTipo(anexo1.getTipo());
					anexoTemp.setNome(anexo1.getNome());
					//anexoTemp.setIdPendencia(base.getId());
					
					if (solicitacao.getId() == null) {
						solicitacaoDao = new SolicitacoesDAO();
						Solicitacoes solicitacaoTemp = new Solicitacoes();
						solicitacaoDao.makePersistent(solicitacaoTemp);
						solicitacao.setId(solicitacaoTemp.getId());						
					}
					
					anexoTemp.setSolicitacao(solicitacao);
					anexoTemp.setMatricula(usuarioVO.getChave());
					anexoTemp.setPrefixo(usuarioVO.getCodDependencia());
					anexoTemp.setData(anexo1.getData());
					solicitacoesAnexoDao = new SolicitacaoAnexoDAO();
					solicitacoesAnexoDao.makePersistent(anexoTemp);
					anexo1 = new SolicitacaoAnexo();
					anexoDao1 = new SolicitacaoAnexoDAO();
					solicitacaoAnexoLista = anexoDao1.anexosDeUmaSolicitacao(this.solicitacao.getId());
					anexoTemp = new SolicitacaoAnexo();
					solicitacaoDao = new SolicitacoesDAO();
					evento = null;
					
					//Atualiza lista de solicitações para mostrar a nova solicitação na página listaSolicitacaoEfet
					solicitacoes = solicitacaoDao.buscarListaInicial(usuarioVO.getCodDependencia(), usuarioVO.getCodDependencia(), usuarioVO.getCodDependencia());
					
					//MENSAGEM DE CONFIRMAÇÃO PARA O USUÁRIO CASO O REGISTRO TENHA SIDO GRAVADO
					FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(&quot;Arquivo gravado com sucesso!&quot;));

				} catch (FileNotFoundException e) {
					e.printStackTrace();
					FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,(&quot;Não foi possível gravar.&quot;), null));

				} catch (IOException e) {
					e.printStackTrace();
					FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,(&quot;Não foi possível gravar.&quot;), null));

				}
		
			} else {
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,(&quot;Todos os campos do painel devem ser preenchidos.&quot;), null));

			}
		}		
		
	}
F

coloca o dialog e o grid em forms diferentes e da um nome ao form, e depois no update vc coloca o nome do form.

tb estava com estes problemas…

eu faço assim e funciona

R

poha…

ta tenso a situação!

coloquei ao inves do update do salvar
meti um:
f:ajax render="@form"></f:ajax>

ai a primeira vez:
salva normal, aparece a mensagem do growl.

segunda vez:
dialog todo limpo, salva mas não aparece a mensagem do growl.

terceira vez:
dialog com os valores da segunda vez e não salva mais

R

fdcarli:
coloca o dialog e o grid em forms diferentes e da um nome ao form, e depois no update vc coloca o nome do form.

tb estava com estes problemas…

eu faço assim e funciona


vo testar

F

tive analisando sua estrutura agora, acredito que vc deva colocar os menus em um form e o dialog em outro

<p:menubar autoSubmenuDisplay="false" styleClass="menuBar">

este inteiro em um form

e este inteiro em outro form

<p:dialog widgetVar="dialogSolicitacao"
R

eu coloquei em um mesmo form pq um usuário ali de cima sugeriu… mas já voltou ao modo padrão…
o menubar está em um form, e dentro do dialog tem outro.

removi todos panelgrids
e continua com o mesmo problema

Criado 14 de setembro de 2011
Ultima resposta 15 de set. de 2011
Respostas 9
Participantes 4