[Resolvido]Mensagem de sistema em componente primefaces growl não quer aparecer

Boa tarde caros amigos e amigas do GUJ, tenho uma aplicação em JSF2/FACELETS/… e nela estou com o seguinte problema:
Ao transitar de uma página X, após sistema realizar um processamento, e redirecionar para página Y, preciso mostrar uma mensagem, por exemplo:
‘Protocolo enviado com sucesso!’
Para isso estou usando o componente

<p:growl id="msg" showDetail="true"/>

No botão que dispara a ação, no atributo update estou colocando o id ‘msg’, conforme exemplo do site do Prime Faces.
No mbean também estou adiconando a mensagem conforme indicado no site, enfim, ele funciona quando continuo na mesma paǵina após a ação,
noutro caso, transitando entre páginas ele não funciona. Ja coloquei ele na página Y, tentei dar forward explícito mas infelizmente a quantidade de informações
que possuo não é suficiente para uma análise certeira sobre esse problema.

Alguém saberia me ajudar?

Quando você navega você está navegando por sendRedirect?

Como que você envia o usuário para a outra tela?

Uso faces-redirect=true na url para onde ele será redirecionado.

Kappa exibo uma mensagem no p:growl da seguinte forma quando salvo um contato …

<p:growl />		

FacesContext.getCurrentInstance().addMessage("consulta:id",new FacesMessage("Usuário Cadastrado com Sucesso!"));

Opa, esse primeiro atributo do addMessage eu sempre passo null, vou testar esse exemplo seu…

Pois é. O seu “problema” é o redirect.

Nesse post eu falo sobre isso: JSF Exibindo Objeto e Mensagens após Redirect.

O redirect mata tudo que você tenha colocado no request (como mensagens para ser exibido para o usuário).

Não funcionou, fiz dois testes, com o grow na página X e depois na Y e…

				 FacesContext.getCurrentInstance().addMessage(form:id", new FacesMessage( FacesMessage.SEVERITY_INFO, "AVISO", Constantes.MSG_PROTOCOLO_TRAMITACAO_SUCESSO ));

Pois é. O seu “problema” é o redirect.

Nesse post eu falo sobre isso: JSF Exibindo Objeto e Mensagens após Redirect.

O redirect mata tudo que você tenha colocado no request (como mensagens para ser exibido para o usuário).[/quote]

Vou testar aqui retirando o redirect, lembrando que o escopo do meu MBEAN é session, tb não uso navigation rules
e no comandButton que dispara a ação, uso actionListener…

Pois é. O seu “problema” é o redirect.

Nesse post eu falo sobre isso: JSF Exibindo Objeto e Mensagens após Redirect.

O redirect mata tudo que você tenha colocado no request (como mensagens para ser exibido para o usuário).[/quote]

Vou testar aqui retirando o redirect, lembrando que o escopo do meu MBEAN é session, tb não uso navigation rules
e no comandButton que dispara a ação, uso actionListener…[/quote]

Tudo bem que ele é session, ele vai guardar todos os dados dentro dele (atributos).

Mas o ato de enviar uma mensagem não tem influência alguma da parte do MB (Requested, Session, Application). A não ser que você guarde a mensagem como um atributo String do seu MB e acabe por exibi-la.

Retirei o faces-redirect=true e ainda não funcionou, continuarei os testes aqui e se conseguirem novas explicações agradeço a todos… abç

Se você estava utilizando a navegação via redirect, imagino eu que você esta utilizando ajax. Estou certo? (coloca o código de como está o botão/link agora).

Tente retirar o ajax e fazer uma navegação normal, caso eu esteja certo. Se não a gente pensa em outra coisa.

Home, para onde será feito o redirecionamento.

<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:p="http://primefaces.prime.com.tr/ui">

<h:body>
	<div id="conteudoHome">
		<h:form id="frmHome" prependId="false">
		    <p:growl id="msg" showDetail="true"/>
			<h:graphicImage alt="SIPROT_HOME" name="construcao.gif" library="img" />
		</h:form>
	</div>
</h:body>
</html>

Página de onde parte o redirecionamento

<h:body>
	<div id="divProtocolo">
		<h:form id="formProtocolo" prependId="false">
			<p:growl id="msg" showDetail="true"/>
			<p:toolbar>
				<p:toolbarGroup align="left"> 
				
					<p:commandButton id="btnNovo" 
									 type="push" 
									 value="Novo Protocolo" 
									 image="ui-icon-document" 
									 action="#{ProtocoloBean.redirectTipoSolicitacao}" 
									 disabled="#{ProtocoloBean.controlBlockAll}"/>
					<p:divider />
					
					<p:commandButton id="btnSalvar" 
									 type="push" 
									 image="ui-icon-disk" 
									 update="msg menuDireito tabProtocolosUnid tabProtocolosFuncionario" 
									 actionListener="#{ProtocoloBean.salvaProtocolo}"
									 disabled="#{ProtocoloBean.ctrlSalvar or ProtocoloBean.controlBlockAll}"/>
					
					<p:commandButton type="push" 
									 title="Print" 
									 image="ui-icon-print"
									 disabled="#{ProtocoloBean.controlBlockAll}"/>
					
					<p:commandButton id="btnCancelar" 
									 onclick="dlg.show()" 
									 type="push" 
									 title="Cancelar" 
									 image="ui-icon-close" 
									 update="msg menuDireito tabProtocolosUnid tabProtocolosFuncionario "
									 disabled="#{ProtocoloBean.ctrlCancelar or ProtocoloBean.controlBlockAll}"/>
					
					<p:commandButton id="btnFinalizar" 
									 type="push" 
									 title="Finalizar" 
									 image="ui-icon-arrowreturnthick-1-s" 
									 update="msg menuDireito tabProtocolosUnid tabProtocolosFuncionario " 
									 actionListener="#{ProtocoloBean.finalizaProtocolo}" 
									 disabled="#{(ProtocoloBean.protocolo.statusProtocolo.idStatusProtocolo eq 1 ) 
					                             or (ProtocoloBean.protocolo.statusProtocolo.idStatusProtocolo eq 4) or ProtocoloBean.ctrlFinalizar or ProtocoloBean.controlBlockAll}"/>
					
					<p:commandButton type="push" 
					                 title="Ajuda" 
					                 image="ui-icon-help"/>
					
					 <h:selectManyCheckbox id="selectPrt" 
					                      rendered="#{ ((not ProtocoloBean.isNewProtocol) 
					                                   and (ProtocoloBean.protocolo.statusProtocolo.idStatusProtocolo !=2 ) 
					                                   and (ProtocoloBean.protocolo.statusProtocolo.idStatusProtocolo !=3 )
					                                   and (ProtocoloBean.protocolo.statusProtocolo.idStatusProtocolo !=5 )) 
					                                   and (not ProtocoloBean.controlBlockAll) 
					                                   and ( ProtocoloBean.protocolo.statusProtocolo.idStatusProtocolo != 4) }" >
					 	<f:selectItem id="selProtocolForMe" itemValue="0" itemLabel="Selecionar Protocolo" />
					 	<p:ajax update="selProtocolForMe tabProcessamento msg menuDireito tabProtocolosUnid tabProtocolosFuncionario formProtocolo" ajax="false" listener="#{ProtocoloBean.direcionarProtocolo}" oncomplete="selectPrt.disabled = true;"/>
					</h:selectManyCheckbox>
					
				</p:toolbarGroup>

				<p:divider />

				<p:toolbarGroup align="right">
				    
				    <h:outputLabel id="txtTramitacao" value="Sentido da tramitação: " onfocus="true" />
				    
					<h:selectOneMenu id="slcAcionar" 
					                 value="#{ProtocoloBean.fluxo.id.idFluxo}" 
					                 disabled="#{ProtocoloBean.ctrlTramitar or ProtocoloBean.controlBlockAll}" 
					                 required="true"
					                 requiredMessage="Escolha um destino!"
					                 update="menuDireito tabProtocolosUnid tabProtocolosFuncionario formProtocolo btnTramitar1 btnTramitar2">
					    <f:selectItem itemValue="0" itemLabel="Selecione" />
					    <f:selectItems id="selAc"
							           value="#{ProtocoloBean.fluxosTramitacao}"
							           var="f" 
							           itemLabel="#{f}"
							           itemValue="#{f.id.idFluxo}" />
					    <p:ajax update="btnTramitar1 btnTramitar2" ajax="false" event="change" listener="#{ ProtocoloBean.acertaAcaoFluxo }"/>
					</h:selectOneMenu>

					<p:commandButton id="btnTramitar1" 
					                 type="push" 
					                 title="Tramitar1"
					                 actionListener="${ ProtocoloBean.tramitar }"
					                 rendered="#{ ProtocoloBean.acao == 0 }"
					                 disabled="#{ProtocoloBean.ctrlTramitar or ProtocoloBean.controlBlockAll}"
					                 image="ui-icon ui-icon-arrowreturnthick-1-e" 
					                 update="formProtocolo msg menuDireito tabProtocolosUnid tabProtocolosFuncionario"
					                 />
					
					<p:commandButton id="btnTramitar2"
					                 type="push"
					                 title="Tramitar2"
					                 onclick="dlg2.show();return false;"
					                 rendered="#{ ProtocoloBean.acao == 1 }"
					                 disabled="#{ProtocoloBean.ctrlTramitar or ProtocoloBean.controlBlockAll}"
					                 image="ui-icon ui-icon-arrowreturnthick-1-e" 
					                 update="formProtocolo msg menuDireito tabProtocolosUnid tabProtocolosFuncionario"
					                 />
				</p:toolbarGroup>

			</p:toolbar>

.............................................

Pois é. Vi que você ta utilizando 300 botões mas não sei qual é.

Mas como vi que você está utilizando o botão do primefaces lá vai a bomba. Ele utiliza o Ajax por padrão. [=

Faça o teste novamente retirando o redirect e adicionando a seguinte opção ao seu botão ajax=false (ou alguma coisa que tenha ajax escrito).

Infelizmente não funcionou, vou ver se consigo uma outra opção de componente para a minha necessidade… mas o padrão do meu sistema é o growl… Vamos ver no que dá… valew

Como ultima alternativa então, tenta criar a classe MultiPageMessagesSupport que eu te passei no link do post.

Não sei se o problema ja foi resolvido, mas o growl com redirect nao funciona como nosso amigo disse. Então é necessario usar o flash
Aqui quando uso redirect e quero exibir o growl faço assim

facesContext.addMessage("cadOA", new FacesMessage("Objeto Cadastrado com Sucesso"));
facesContext.getExternalContext().getFlash().setKeepMessages(true);  //AQUI ELE MANTEM A MENSAGEM
return "addToWel";	

Já foi respondido acima, desculpe.

Antes de ressuscitar um tópico, dê uma olhada nas postagens. Você postou exatamente o que o ATEN já havia postado há mais de um ano.

Desculpe, só quis ajudar porque encontrei somente agora a resposta. Eu não tinha visto a página 2, logo não tinha visto a resposta. Só depois que eu postei que apareceu acima.