Abrir um Rich:modalPanel de dentro de um outro Rich:modalPanel

11 respostas
thiagowig

Fala galera.

To a seguinte situação:

Tenho um modal que é exibido normalmente, com seus campos e botões.
Um desses botoes abre um outro modal e é ai que o problema começa.

No firefox funciona normalmente porém no explorer não.

Se eu coloco um h:commandButton o segundo modal é exibido e depois fecha os dois abertos,
Se eu coloco um a4j:commandButton o segundo modal é exibido porém trava o explorer.,

Alguém tem uma solução?

11 Respostas

C

Se tiver como postar o codigo pra gente e a versão do richfaces. Mas isso geralmente ocorre
nas versões antigas quando se coloca os modais dentro de um unico form.

Att.
Cleison R. Lima

thiagowig

Versão do rich: 3.1.3
Verifiquei o html gerado e não há form dentro de form, os htmls estão todos separados.

Chamada pro primeiro modal:

<h:commandButton id="btnAdicionarFasciculo"  value="#{msg.btn_incluir}" 
									   action="#{mbean.fasciculoBB.exibir}"
									   onclick="Richfaces.showModalPanel('modalFasciculo');"	
									   styleClass="botaoVerde" 
									   rendered="#{!mbean.desabilitaCamposDetalhar}" />

Código do primeiro modal:

<rich:modalPanel id="modalFasciculo" autosized="true" headerClass="modal_panel_header" >
	  	<f:view>
			<a4j:form id="ajaxFormFasciculo" reRender="#{reRenderList}" limitToList="false">
			
			
					<table align="right" width="200px" cellpadding="0" cellspacing="0">
						<tr>
							<td align="center">
								<h:commandButton id="btnVoltar" value="#{msg.btn_voltar}" action="#{mbean.fasciculoBB.fechar}" onclick="Richfaces.hideModalPanel('modalFasciculo');" immediate="true" styleClass="botaoPequenoVerdeClaro"/>								
							</td>
							<td align="center">
								
								
								
								...
								
								
								<!-- CHAMADA PRO SEGUNDO MODAL -->								
								<h:commandButton id="btnModalPalavraChave" value="#{msg.btn_cadastrar_nova}" styleClass="botaoVerde" action="#{mbeanPalavraChave.exibirModal}" onclick="Richfaces.showModalPanel('modalPalavraChave');" />
					
			
			</a4j:form>
		</f:view>	
	  </rich:modalPanel>

Código do segundo modal:

<rich:modalPanel id="modalPalavraChave" height="600" width="850" moveable="true" headerClass="modal_panel_header">
		<f:view>
			<a4j:form id="ajaxFormPalavraChave">
				
				<div class="conteudoModal">
					
					....

					
				</div>
				<div class="rodapeModal">
				</div>
				
			</a4j:form>
		</f:view>		
	</rich:modalPanel>
thiagowig

Alguém?

leobmx

Cara tenta usar o <f:subview> na segunda popup provavelmente vai funcionar ai usa um a4j:commandButton nas duas chamadas

lexmaximo

Caraca,
estou com um problema parecido.

Minha modal trava no ajax, executa o que deve executar mas trava e não fecha e fica como se o ajax estivesse em execução.

leobmx

você ta usando evento de oncomplete para fechar a modal?

lexmaximo

leobmx, bom dia!

Estou usando desta forma:

<a4j:commandButton

id=“btnOK”  value=“OK”

action="#{etiquetaManager.gerarEtiquetasPorManifestoTransferencia()}"

onclick=“this.form.target=’_blank’;”

reRender=“quantidadeEtiquetaModal”

oncomplete="#{etiquetaManager.closeModal}"

immediate=“true”

>

<a4j:support event=“oncomplete” reRender=“quantidadeEtiquetaModal” ajaxSingle=“true” />

</a4j:commandButton>

Eu preciso do seguinte, ao clicar neste botão, meu sistema gere uma nova aba, ou página, com um arquivo pdf, o arquivo está instanciando, mas conforme está o código aí ele não gera esta nova aba.

1 - clico no bntOK
2 - abre nova aba com o formulário em pdf
3 - na página do sistema closeModal para fechar a modal e permancer na página com as informações nela contidas.

Alguma orientação?

leobmx

Dessa forma é bem mais chata de fazer, você pode implementar uma modal do richfaces, ai no envento de oncomplete tu da um close nela se você tiver usando richfaces abra uma modal, cria uma modal com o que você precisa e um backed bean para ela, vai fazer a mesma coisa e vai te retornar os resultados, e nesse caso você abriu uma janela nova no navegador, pra fechar só usando window.close dai já envolve javascript é a única forma de fechar a janela, para fazer dessa forma você teria que abrir a nova janela via javascript e na pagina que abre ela criar uma função para o retorno mais ou menos assim:

Pagina Principal:

<a4j:commandButton 
id="btnOK" value="OK" 
onclick="window.open("url da janela")" 
reRender="quantidadeEtiquetaModal" 
immediate="true" 
> 
<a4j:support event="oncomplete" reRender="quantidadeEtiquetaModal" ajaxSingle="true" /> 
</a4j:commandButton>

e teria que criar uma função de retorno da popup

function retornoPopup(retorno){
    document.formulario.campo.value = retorno;

}

E na popup você colocaria um botão e no clique dele você coloca:

window.opener.retornoPopup(passando o parametro java que você quer popular no campo); window.close();

ai ele vai chamar a função da outra página e fechar, quando ele chamar a função você vai popular no campo, que é a função retornoPopup(retorno);

Qualquer dúvida posta aí que eu ti dou uma ajuda.

lexmaximo

ow cara, valeu.

Funfou aqui com as dicas que você deu.
Pode deixar que qualquer outra dúvida eu posto por aqui.

abçs

leobmx

Beleza, você usou javascript mesmo?

ah e pelo que vi ali você nem precisa fazer reRender no campo

Abraço.

lexmaximo

Na verdade não usei mas com suas dicas vi que usando as propriedades do btn eu conseguia matar essa dificuldade.

É realmente ali no reRender não será necessário. Porque a página ficará estática e também se com um close resolveria.
Usei este método.

public void closeModal() {
        exibirModal = false;
        setExibirModal(exibirModal);
    }

Este requisito do meu sistema ele deve gerar um documento em pdf, porém há uma lista de itens no qual poderá ser gerado um por um, então era necessário permanecer na página.
Se tratando de lotes, cada documento é completamente diferente do anterior.

O problema é que às vezes queremos caprichar demais e nem sempre é necessário e usual.

abçs

Criado 17 de dezembro de 2009
Ultima resposta 12 de jul. de 2012
Respostas 11
Participantes 4