Rich:modalPanel - Desaparece ao fazer reRender

Boas pessoal,

Estou a fazer migração de uma aplicação para WEB em que existem muitas janelas e por isso tenho de usar várias vezes modal panel.

Este é o meu menu, ao clicar num daqueles icons (por exemplo o log), o modalpanel aparece vazio e desaparece logo, pois eu mando fazer reRender para ele popular a tabela do log. Na segunda vez que carrego no icon ele aparece já com os dados populados (guardou os da ultima vez), mas volta a desaparecer, pois sempre que clico naquele icon é feito o reRender. Mostro nas imagens abaixo o que acontece:

  • O meu menu:

  • Na primeira vez que clico, podemos ver o modalpanel com a tabela vazia. Desaparece passado 1 segundo:

  • Na segunda vez que clico, pode podemos ver o modalpanel com a tabela populada. Desaparece passado 1 segundo:

O meu código:

Código do botão (icon) que abre o modalPanel:

[code]<a4j:commandButton value=“log” image='img/log.png’
action="#{mensagemBean.log()}“
onclick=”#{rich:component(‘mpLog’)}.show();“
rendered=”#{mensagemBean.idmsg!=null}"
reRender=“mpLog”>

						<rich:toolTip>
							<span style="white-space: nowrap"> Log </span>
						</rich:toolTip>
					</a4j:commandButton>[/code]

Código de mensagemBean.log():

public void log() { msgLog=Interfaces.listarLog(mensagemSelecionada); }

Código modalPanel (ocultei o que não interessa):

[code] <rich:modalPanel id=“mpLog” style=“background:url(‘img/Clouds2.png’);” width=“820” height=“400”>





<rich:dataTable id=“tableL” var=“log"
value=”#{mensagemBean.msgLog}" rowClasses="cur"
align=“center”>

							<h:column>
								<f:facet name="header">Sequência</f:facet>
								<h:outputText value="#{log.sequencia}"></h:outputText>
							</h:column>
							<h:column>
								<f:facet name="header">Origem</f:facet>
								<h:outputText value="#{log.origem}"></h:outputText>
							</h:column>
							<h:column>
								<f:facet name="header">Data Criação</f:facet>
								<h:outputText value="#{log.dataCriacao}"></h:outputText>
							</h:column>
							<h:column>
								<f:facet name="header">Erro</f:facet>
								<h:outputText value="#{log.code}"></h:outputText>
							</h:column>
							<h:column>
								<f:facet name="header">Mensagem Clip</f:facet>
								<h:outputText value="#{log.clip}"></h:outputText>
							</h:column>
								<h:column>
								<f:facet name="header">Mensagem Sigra</f:facet>
								<h:outputText value="#{log.sigra}"></h:outputText>
							</h:column>
							</rich:dataTable>
	
   </rich:modalPanel>[/code]

Ou seja, alguém sabe como posso fazer para o modalPanel não se fechar sozinho e ao mesmo tempo fazer reRender?

Os meus cumprimentos,
Obrigado

Se eu fizer return false; no onclick ele não fecha o modalPanel mas também não popula os valores, visto que não chama a action.

Ao invés do evento no botão ser o onclick, utilize o oncomplete, pois assim o modal será atualizado e depois refeito.

O que acontece com atualmente:

  1. exibe o modal ainda vazio (onclick)
  2. executa a action
  3. o modal eh refeito (por isso ele some)

Como vai ficar com o oncomplete:

  1. executa a acition
  2. o modal eh refeito (ainda como hide)
  3. o modal será exibido

[quote=soucaixa]Ao invés do evento no botão ser o onclick, utilize o oncomplete, pois assim o modal será atualizado e depois refeito.

O que acontece com atualmente:

  1. exibe o modal ainda vazio (onclick)
  2. executa a action
  3. o modal eh refeito (por isso ele some)

Como vai ficar com o oncomplete:

  1. executa a acition
  2. o modal eh refeito (ainda como hide)
  3. o modal será exibido

[/quote]

Eu tinha experimentado com onload e não funcionou, mas realmente não tinha experimentado com oncomplete. Já está tudo ok, muito obrigado :slight_smile:

Cumprimentos,