Ajuda - Navigation Rules - JSF 2.0

Caros amigos da GUJ, sou iniciante em programação web, estou utilizando jsf 2.0 e estou com o seguinte problema.

Nas minhas regras de navegação definidas no Faces-Config utilizo o recurso coloquei a String no e tudo funciona super bem, ele me redireciona de uma página para outra, as funcionalidades do sistema (métodos) funcionam perfeitamente, o real problema é o fato dele não mostrar minha mensagem de sucesso. Fiz alguma pesquisas e li algo sobre usar FlashScope para solucionar o problema, voltar para o padrão do JSF o “forward”, enfim … Segue abaixo o código do UsuárioBean, e Faces-Config.

Desde já, agradeço a todos que puderem ajudar a mostrar minha mensagem :smiley: .

UsuarioBean.

package ManagedBeans;

import java.io.Serializable;
import java.util.List;

import hibernateUtil.EntityManagerUtil;

import javax.faces.application.FacesMessage;
import javax.faces.bean.*;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.PersistenceException;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Expression;
import org.hibernate.criterion.MatchMode;

import entidadesJPA.Empregado;
import entidadesJPA.Usuario;

@SuppressWarnings("deprecation")
@SessionScoped
@ManagedBean(name="usuarioBean")
public class usuarioBean implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = -5122478651631648714L;

	Usuario usuario;
	
	private String texto;
	
	Empregado empregado;
	
	int bloqueia;
	
	String matricula;
	
	String senhaConfirmacao;
	
	FacesContext context = FacesContext.getCurrentInstance(); 
	
	Usuario usuarioSelecionado;
	
	private EntityManager entityManager;
	
	List<Usuario> listaUsuario;

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}
	
	public String preparaAdicionarUsuario(){
		usuario = new Usuario();
		matricula = "";
		limparSenhas();
		bloqueia = 0;
		return "novoUsuario";
	}
	
	public String prepararAlterarUsuario(){
		usuario = usuarioSelecionado;
		matricula = usuarioSelecionado.getEmpregado().getMatricula();
		limparSenhas();
		bloqueia = 1;
		return "editarUsuario";
	}
	
	public String visualizarUsuario(){
		usuario = usuarioSelecionado;
		return "visualizarUsuario";
	}
	
	public String cancelarEditarUsuario(){
		usuario=usuarioSelecionado;
		return "listarUsuario";
	}
	
	public Usuario getUsuarioSelecionado() {
		return usuarioSelecionado;
	}

	public void setUsuarioSelecionado(Usuario usuarioSelecionado) {
		this.usuarioSelecionado = usuarioSelecionado;
	}

	public void setListaUsuario(List<Usuario> listaUsuario) {
		this.listaUsuario = listaUsuario;
	}

	public String excluirUsuario(){
		Usuario usuarioTemp = usuarioSelecionado;
		EntityTransaction transation = getEntityManager().getTransaction();
		try{
			transation.begin();
			getEntityManager().remove(usuarioTemp);
			transation.commit(); 
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Usuario", "Deletado com Sucesso!"));  
			return "";
		}catch (Exception e) {
			e.printStackTrace();
			transation.rollback();
			return "editarUsuario";
		}
	}
	
	public String adicionarUsuario() {
		EntityTransaction transation = getEntityManager().getTransaction();
		try{
			if(usuario.getSenha().equals(senhaConfirmacao)){
			transation.begin();
			getEntityManager().persist(usuario);
			transation.commit();
			preparaAdicionarUsuario();
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Usuario", "Salvo com Sucesso!"));
			return "listarUsuario";
		}else{
			limparSenhas();
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Usuario", "Senhas Diferentes!"));
			return "";
			}
		}catch (PersistenceException pe) {
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Usuario", "Usuário Já Cadastrado!"));
			preparaAdicionarUsuario();
			return "";
		}catch (Exception e) {
			e.printStackTrace();
			return "novoUsuario";
		}
	}
		
	public String alterarUsuario(){
		EntityTransaction transation = getEntityManager().getTransaction();
		try{
			if(usuario.getSenha().equals(senhaConfirmacao)){
			transation.begin();
			getEntityManager().merge(usuario);
			transation.commit();
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Usuario", "Alterado com Sucesso!")); 
			return "visualizarUsuario";
		}else{
			limparSenhas();
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Usuario", "Senhas Diferentes!"));
			return "";
			}
		}catch (Exception e) {
			e.printStackTrace();
			transation.rollback();
		}
		return "editarUsuario";
	}

	@SuppressWarnings("unchecked")
	public List<Usuario> getListaUsuario() {
		listaUsuario = getEntityManager().createQuery("FROM Usuario").getResultList();
		return listaUsuario;
	}

	public EntityManager getEntityManager() {
		if(entityManager==null){
			entityManager = EntityManagerUtil.getInstance().createEntityManager();
		}
		return entityManager;
	}
	
	public void buscarUsuario(){
		Session session = (Session) getEntityManager().getDelegate();
		Criteria criteria = session.createCriteria(Empregado.class);
		criteria.add(Expression.like("matricula", matricula,MatchMode.ANYWHERE));
		usuario.setEmpregado((Empregado)criteria.uniqueResult());
	}
		
	public void limparSenhas(){
		usuario.setSenha("");
		senhaConfirmacao = "";
	}
	
	public Empregado getEmpregado() {
		return empregado;
	}

	public void setEmpregado(Empregado empregado) {
		this.empregado = empregado;
	}

	public String getMatricula() {
		return matricula;
	}

	public void setMatricula(String matricula) {
		this.matricula = matricula;
	}

	public String getSenhaConfirmacao() {
		return senhaConfirmacao;
	}

	public void setSenhaConfirmacao(String senhaConfirmacao) {
		this.senhaConfirmacao = senhaConfirmacao;
	}

	public int getBloqueia() {
		return bloqueia;
	}

	public void setBloqueia(int bloqueia) {
		this.bloqueia = bloqueia;
	}

	public String getTexto() {
		return texto;
	}

	public void setTexto(String texto) {
		this.texto = texto;
	}
}

Faces-Config

<!-- ###############################
 USUÁRIO -->
 <navigation-rule>
  <navigation-case>
   <from-outcome>novoUsuario</from-outcome>
   <to-view-id>/cosanpa/usuario/novoUsuario.xhtml</to-view-id>
   <redirect/>
  </navigation-case>
 </navigation-rule>
 <navigation-rule>
  <navigation-case>
   <from-outcome>editarUsuario</from-outcome>
   <to-view-id>/cosanpa/usuario/editarUsuario.xhtml</to-view-id>
   <redirect/>
  </navigation-case>
 </navigation-rule>
 <navigation-rule>
  <navigation-case>
   <from-outcome>listarUsuario</from-outcome>
   <to-view-id>/cosanpa/usuario/listarUsuario.xhtml</to-view-id>
   <redirect/>
  </navigation-case>
 </navigation-rule>
 <navigation-rule>
  <navigation-case>
   <from-outcome>visualizarUsuario</from-outcome>
   <to-view-id>/cosanpa/usuario/visualizarUsuario.xhtml</to-view-id>
   <redirect/>
  </navigation-case>
 </navigation-rule>

JSF 2.0 n utiliza regras de navegação, é tudo direto. Dê uma lida na documentação deles para se situar um pouco.

Retira o <redirect/> q deve funcionar…pq o jsf limpa a fila de mensagens pq causa do 301 do redirecionamento.

Então … li um pouco sobre a navegação implícita onde segundo o que eu li, não necessita das navigation rules, necessita apenas do caminho, sem extensão, no meu caso …

return "/cosanpa/usuario/novoUsuario";

infelizmente não funcionou D:

Sobre retirar o redirect … testei tbm, porém não funcionou D:

As tags na pagina esta ok?
To vendo q vc não especificou o tipo de erro tb…

Fernando, estão todas sim, até pq quando eu usava o tudo funcionava, mas a mensagem não era mostrada. Estou nisso há um bom tempo já. Já li tanta coisa mas parece que nada funciona ;x

Não existe segredo nenhum nas mensagem…oq eu sei q com redirect não vai funcionar mesmo…agora temos que descobrir pq não esta mostrando…
O JSF pode estar enfileirando as mensagens, mas não estão sendo mostradas nas paginas…

Pois é Fernando, ainda não desisti, nem vou … Me falaram tbm que com o não mostraria pois as mensagens não suportam o redirecionamento e são perdidas. Qualquer coisa, por favor, poste aí :smiley: e eu continuarei pesquisando sem descansar tbm.

Não é que não suportam…é que pelo redirecionamento, a fila de mensagens JSF é esvaziada para pelo fato do HTTP 301.
Faz assim cria um projeto teste do zero com JSF 2 que imprima uma mensagem teste na navegação de uma GUI para outra.
Dai vai vendo oq difere da sua app.