RequestContext do PrimeFaces não funciona

6 respostas
H

Galera, preciso exibir um popup de sucesso para o usuário ao final do cadastro.
Quando termina de fazer o cadastro dou um show no confirmDialog:

public void salvar() {    
	  
	    // validacoes  
	  
	    // caso tenha dado tudo certo  
	    RequestContext context = RequestContext.getCurrentInstance();    
	    //execute popup  
	    context.execute("result.show();");    
	}

E abaixo meu confirmDialog:

<p:confirmDialog widgetVar="result">
				<h:form id="resultBlock">
				
					<!-- MSG SUCESSO -->
					<p:fieldset id="informationsuccess" legend="${globalMsgs.legend_success}">
						<h:panelGrid columns="1">
							<h:outputLabel styleClass="textLabel" value="${bloqueioMassivoController.arquivoLote.codigoLote}" />			
							<h:outputLabel styleClass="textLabel" value="${bloqueioMassivoController.totalRegistrosProcessados}"/>			
						</h:panelGrid>
						
						<!-- BOTOES -->
						<h:panelGrid columns="1" styleClass="panelButton">
							<p:commandButton id="ok" value="${globalMsgs.label_btn_ok}" onclick="result.hide()" type="button" />
						</h:panelGrid>
					</p:fieldset><br/>
					 
				</h:form>
			</p:confirmDialog>

Tipo, ele registra os dados no banco, cai no RequestContext mas não exibe o popup.
E não exibe nenhuma mensagem de erro.
Alguém poderia me ajudar?

6 Respostas

Rodrigo_Sasaki

Cadê o botão que invoca o método salvar?

H

O botão que chama o método salvar tá assim:

<!-- BOTOES -->
				<h:panelGrid columns="2" styleClass="panelButton">
					<p:commandButton value="${globalMsgs.label_btn_confirm}" action="#{bloqueioMassivoController.salvar}" ajax="false"/>
					<p:commandButton value="${globalMsgs.label_btn_cancel}" action="#{bloqueioMassivoController.cancelar}" ajax="false" immediate="true" />
				</h:panelGrid>
Rodrigo_Sasaki

Mais uma vez o mesmo erro. :slight_smile:

Você não consegue fazer funcionar porque o RequestContext só funciona com chamadas ajax. como a sua não é ajax, não irá funcionar mesmo :slight_smile:

o execute JavaScript no oncomplete, porém em uma requisição normal, esse evento não existe.

H

Entendi Rodrigo.
Teria outra maneira de eu chamar o popup no final da requisição sem usar ajax?

Rodrigo_Sasaki

Só com JavaScript no onload, porque você está carregando a página inteira de novo, como se estivesse carregando pela primeira vez, com uma flag de controle ou algo do tipo. Pode até usar JQuery se quiser para capturar o evento document.ready já que ele vem empacotado com o PrimeFaces. Algo assim:$(function(){ if(abrirPopup){ result.show(); } });

H

Legal Rodrigo, vou fazer isso.
Deixa eu te perguntar, eu não manjo muito de javaScript. No seu exemplo preciso de uma variável pra controlar quando o popup deverá aparecer ou não.
O javaScript consegue pegar um atributo do java pelo get?

Criado 4 de julho de 2013
Ultima resposta 4 de jul. de 2013
Respostas 6
Participantes 2