Rich:modalPanel - Desaparece ao fazer reRender

3 respostas
G

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:

[img]http://img545.imageshack.us/img545/849/68830744.jpg[/img]

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

[img]http://img841.imageshack.us/img841/7755/46857597.jpg[/img]

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

[img]http://img705.imageshack.us/img705/9082/91283583.jpg[/img]

O meu código:

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

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

Código de mensagemBean.log():

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

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

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

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

3 Respostas

G

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.

S

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
G

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

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,

Criado 19 de fevereiro de 2013
Ultima resposta 19 de fev. de 2013
Respostas 3
Participantes 2