FacesMessages não são renderizadas

6 respostas
D

Tenho 1 paginas que eu uso para um cadastro e a pagina 1, seria a pagina ‘principal’ e a pagina 2, a pagina com os dados do cadastro.

Cada página utiliza um Backing-Bean distinto e quanto eu salvo, eu faço o seguinte método:

public String salvarOperador(){
...
FacesContext.getCurrentInstance().addMessage("formulario", new FacesMessage("Operador Cadastrado Com Sucesso"));
		setTituloCabecalho("Cargas cadastradas");
		return "voltarEmpresa";

Consigo salvar o usuário numa boa, mas a FaceMessage não é renderizada quando eu retorno da página 2 para a página 1 e na página 1, tenho:

<f:view>
<div>
<h:form id="formulario">
...
<h:messages />
</h:form></div>
</f:view>

Alguém sabe o que está errado nesse trecho?

6 Respostas

E

Está faltando o <h:messages>, que é o “lugar” onde as mensagens serão exibidas.

D

Não está!!

Se eu colocar pra redirecionar para a próxima página, ele não exibe a mensagem e se deixar o redirect como no, funciona normal.

Alguém sabe o pq?

[]'s

rponte

Aconselho-te antes a entender qual a diferença entre um forward e redirect,
http://www.javapractices.com/topic/TopicAction.do?Id=181

Dica 1: As mensagens de erro do JSF ficam no escopo de request
Dica 2: Evite a tag <redirect/> nas tuas regras de navegação. Utilize-a somente quando for necessário.

Abraços e boa sorte.

rbortolon

Olá a todos,

Me diz aí David, conseguiu resolver o seu problema ?

Eu estou enfrentando o mesmo. Meu código no managedBean está identico ao seu no caso de mostrar a mensagem e o redirect que no meu caso faço da seguinte forma -> return “/pages/login?faces-redirect=true” (meu formulário é um form de registro de usuário que redireciona para a página de login após sucesso)

Rafael, você mencionou que as mensagens ficam no escopo Request certo? O meu bean esta com este escopo mas mesmo assim, ao salvar os dados do formulário (clicar no botão ok) não mostra a mensagem. Só redireciona como mencionei no parágrafo acima. Vi alguns casos em que falaram que tenho que implementar um PhaseListener para recuperar as mensagens mas daí envolve ter que inserir a config no faces-config e eu não estou utilizando o faces-config pois um dos propósitos do JSF 2 é justamente não precisar dele certo? Bom, se precisar tudo bem, não que eu seja contra mas gostaria de saber se há uma solução diferente para este problema.

Obrigado!
Sds,
Rodrigo

rponte

Oi rbortolon,

Se você estiver trabalhando com JSF2 você pode utilizar o escopo FLASH para prolongar mensagens e objetos durante redirecionamentos. Dá uma pesquisa sobre isso, com certeza é melhor do que implementar seu próprio phase-listener.

O código seria algo do tipo:

FacesContext context = FacesContext.getCurrentInstance(); context.getExternalContext().getFlash().setKeepMessages(true); context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "key1", "key2"));

rbortolon:

Olá a todos,

Me diz aí David, conseguiu resolver o seu problema ?

Eu estou enfrentando o mesmo. Meu código no managedBean está identico ao seu no caso de mostrar a mensagem e o redirect que no meu caso faço da seguinte forma -> return “/pages/login?faces-redirect=true” (meu formulário é um form de registro de usuário que redireciona para a página de login após sucesso)

Rafael, você mencionou que as mensagens ficam no escopo Request certo? O meu bean esta com este escopo mas mesmo assim, ao salvar os dados do formulário (clicar no botão ok) não mostra a mensagem. Só redireciona como mencionei no parágrafo acima. Vi alguns casos em que falaram que tenho que implementar um PhaseListener para recuperar as mensagens mas daí envolve ter que inserir a config no faces-config e eu não estou utilizando o faces-config pois um dos propósitos do JSF 2 é justamente não precisar dele certo? Bom, se precisar tudo bem, não que eu seja contra mas gostaria de saber se há uma solução diferente para este problema.

Obrigado!
Sds,
Rodrigo

rbortolon

Olá Rafael,

Blza amigão, vou pesquisar hoje a noite e tentar implementar dessa maneira.

Muito obrigado!

Sds,
Rodrigo

Criado 30 de junho de 2008
Ultima resposta 22 de ago. de 2011
Respostas 6
Participantes 4