Cara.. Não sei se vc pode me ajudar..
Primeiro: Descobri o problema. Fiz um @Produces do FacesContext e estava injetando esse objeto como atributo de classe do controller. Sendo que o controller é ViewScoped e o FacesContext, RequestScoped.
Agora minha dúvida:
Estou conseguindo mostrar lindamente a mensagem depois de ter deletado a DI do faces e ter usado o FacesContext.getInstance().
Mas isso só quando eu continuo na mesma página.
Quando o usuário digitar um cpf inválido (ainda adicionarei outras validações, claro), ele fica na mesma página.
Quando estiver tudo certo, ele redireciona pra outra página.
Nessa outra página, não consigo mostrar a msg.
Tudo funciona normalmente. Apenas a msg não é mostrada.
E estou mostrando as msgs pelo p:growl do primefaces 3
Sabe como consigo fazer isso?
Segue o trecho em questão do meu bean:
public String save() {
FacesMessage msg;
if (!validaCpf(funcionario.getCpf())) {
adicionaMsg(FacesMessage.SEVERITY_ERROR, "CPF Inválido!");
return "form?codigoFilial=" + funcionario.getFilial().getCodigo()
+ "&matricula=" + funcionario.getCodigo()
+ "&faces-redirect=true";
}
funcionarioService.save(funcionario);
adicionaMsg(FacesMessage.SEVERITY_INFO, "Funcionário alterado com sucesso!");
return "/funcionarios?faces-redirect=true";
}
public void adicionaMsg(FacesMessage.Severity severity, String detalhe) {
FacesMessage msg = new FacesMessage(severity, "", detalhe);
FacesContext.getCurrentInstance().addMessage(null, msg);
FacesContext.getCurrentInstance().getExternalContext().getFlash().setKeepMessages(true);
}