Exibir o nome do usuário logado em todas páginas da minha aplicação (template)

Bom, a autenticação esta funcionando perfeitamente, agora eu pretendo botar o nome do funcionário logado no canto superior da tela, mas pesquisei e não achei ainda nada que funcione no meu sistema. Segue as classes

Funcionario

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.validation.constraints.Size;

import org.hibernate.validator.constraints.NotEmpty;
import org.hibernate.validator.constraints.br.CPF;

@Entity
@Table(name = "tb_funcionarios")
@NamedQueries({
@NamedQuery(name = "Funcionario.listar", query = "SELECT funcionario FROM Funcionario funcionario" ),
@NamedQuery(name = "Funcionario.buscarPorCodigo", query = "SELECT funcionario FROM Funcionario funcionario WHERE funcionario.codigo = :codigo" ),
@NamedQuery(name = "Funcionario.logar", query = "SELECT funcionario FROM Funcionario funcionario WHERE funcionario.cpf = :cpf AND funcionario.senha = :senha"),
@NamedQuery(name = "Funcionario.buscarPorNome", query = "SELECT funcionario FROM Funcionario funcionario WHERE funcionario.nome = :nome" )
})
public class Funcionario {

	@GeneratedValue(strategy = GenerationType.AUTO)
	@Id
	@Column(name = "fun_codigo")
	private Long codigo;

	@NotEmpty(message = "Insira o Nome")
	@Column(name = "fun_nome", length = 50, nullable = false)
	private String nome;
 
	
	@CPF(message = "CPF Incorreto")
	@Column(name = "fun_cpf", length = 14, nullable = false, unique = true)
	private String cpf;

	@NotEmpty(message = "Insira a Senha")
	@Size(min = 5, max = 15, message = "Sua senha deve conter de 5 a 15 caracteres")
	@Column(name = "fun_senha", length = 50, nullable = false)
	private String senha;
    
	@NotEmpty(message = "Insira um cargo")
	@Column(name = "fun_funcao", length = 50, nullable = false)
	private String funcao;

	public Long getCodigo() {
		return codigo;
	}

	public void setCodigo(Long codigo) {
		this.codigo = codigo;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getCpf() {
		return cpf;
	}

	public void setCpf(String cpf) {
		this.cpf = cpf;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public String getFuncao() {
		return funcao;
	}

	public void setFuncao(String funcao) {
		this.funcao = funcao;
	}

	@Override
	public String toString() {
		return "Funcionario [codigo=" + codigo + ", nome=" + nome + ", cpf=" + cpf + ", senha=" + senha + ", funcao="
				+ funcao + "]";
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((codigo == null) ? 0 : codigo.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Funcionario other = (Funcionario) obj;
		if (codigo == null) {
			if (other.codigo != null)
				return false;
		} else if (!codigo.equals(other.codigo))
			return false;
		return true;
	}
}

FuncionarioDAO

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import br.com.Vendas.domain.Funcionario;
import br.com.Vendas.util.HibernateUtil;

public class FuncionariosDAO {

	public void salvar(Funcionario funcionario) {
		Session sessao = HibernateUtil.getSessionFactory().openSession();

		Transaction transacao = null;

		try {
			transacao = sessao.beginTransaction(); // abrindo a transação
			sessao.save(funcionario);
			transacao.commit(); // confirmando a transação

		} catch (RuntimeException ex) {
			if (transacao != null) {
				transacao.rollback(); // desfaz a transação
			}

		}

		finally {
			sessao.close();
		}

	}

	@SuppressWarnings("unchecked")
	public List<Funcionario> listar() {
		Session sessao = HibernateUtil.getSessionFactory().openSession();

		List<Funcionario> funcionario = null;

		try {

			Query consulta = sessao.getNamedQuery("Funcionario.listar");
			funcionario = consulta.list();

		} catch (RuntimeException ex) {
			throw ex;
		}

		finally {
			sessao.close();
		}

		return funcionario;
	}

	public Funcionario buscarPorCodigo(Long codigo) {
		Session sessao = HibernateUtil.getSessionFactory().openSession();

		Funcionario funcionario = null;

		try {

			Query consulta = sessao.getNamedQuery("Funcionario.buscarPorCodigo");
			consulta.setLong("codigo", codigo);
			funcionario = (Funcionario) consulta.uniqueResult();

		} catch (RuntimeException ex) {
			throw ex;
		}

		finally {
			sessao.close();
		}

		return funcionario;
	}

	public Funcionario buscarPorNome(String nome) {
		Session sessao = HibernateUtil.getSessionFactory().openSession();

		Funcionario funcionario = null;

		try {

			Query consulta = sessao.getNamedQuery("Funcionario.buscarPorNome");
			consulta.setString("nome", nome);
			funcionario = (Funcionario) consulta.uniqueResult();

		} catch (RuntimeException ex) {
			throw ex;
		}

		finally {
			sessao.close();
		}

		return funcionario;
	}
	
	public void excluir(Funcionario funcionario) {
		Session sessao = HibernateUtil.getSessionFactory().openSession();

		Transaction transacao = null;

		try {
			transacao = sessao.beginTransaction(); // abrindo a transação
			sessao.delete(funcionario);
			transacao.commit(); // confirmando a transação

		} catch (RuntimeException ex) {
			if (transacao != null) {
				transacao.rollback(); // desfaz a transação
			}

		}

		finally {
			sessao.close();
		}

	}

	public Funcionario autenticar(String cpf, String senha) {
		Session sessao = HibernateUtil.getSessionFactory().openSession();
		Funcionario funcionario = null;

		try {
			// Executa a query de consulta
			Query consulta = sessao.getNamedQuery("Funcionario.logar");
			// Recebe os dados informados
			consulta.setString("cpf", cpf);
			consulta.setString("senha", senha);
			// Cria consulta do funcionário
			funcionario = (Funcionario) consulta.uniqueResult();
		} catch (RuntimeException ex) {
			throw ex;
		} finally {
			sessao.close();
		}
		return funcionario;
	}
	
	public void editar(Funcionario funcionario) {
		Session sessao = HibernateUtil.getSessionFactory().openSession();

		Transaction transacao = null;

		try {
			transacao = sessao.beginTransaction(); // abrindo a transação

			sessao.update(funcionario);
			transacao.commit(); // confirmando a transação

		} catch (RuntimeException ex) {
			if (transacao != null) {
				transacao.rollback(); // desfaz a transação
			}

		}

		finally {
			sessao.close();
		}

	}
}

FuncionarioBean

import java.io.IOException;
import java.util.ArrayList;

import org.hibernate.Session;
import org.omnifaces.util.Faces;
import org.omnifaces.util.Messages;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import br.com.Vendas.DAO.FuncionariosDAO;

import br.com.Vendas.domain.Funcionario;
import br.com.Vendas.util.JSFUtil;

@ManagedBean(name = "MBFuncionarios")
@ViewScoped
public class FuncionariosBean {
	private Funcionario funcionario = new Funcionario();
	private FuncionariosDAO fdao = new FuncionariosDAO();

	private ArrayList<Funcionario> itens;
	private ArrayList<Funcionario> itensFiltrados;
	private String acao;
	private String nome;
	private Long codigo;

	public Long getCodigo() {
		return codigo;
	}

	public void setCodigo(Long codigo) {
		this.codigo = codigo;
	}

	public String getAcao() {
		return acao;
	}

	public void setAcao(String acao) {
		this.acao = acao;
	}

	public Funcionario getFuncionario() {

		return funcionario;
	}

	//
	public void setFuncionario(Funcionario funcionario) {
		this.funcionario = funcionario;
	}

	public ArrayList<Funcionario> getItens() {
		return itens;
	}

	public void setItens(ArrayList<Funcionario> itens) {
		this.itens = itens;
	}

	public ArrayList<Funcionario> getItensFiltrados() {
		return itensFiltrados;
	}

	public void setItensFiltrados(ArrayList<Funcionario> itensFiltrados) {
		this.itensFiltrados = itensFiltrados;
	}

	// @PostConstruct
	public void prepararPesquisa() {

		try {
			FuncionariosDAO fdao = new FuncionariosDAO();
			itens = (ArrayList<Funcionario>) fdao.listar();

		} catch (RuntimeException e) {
			JSFUtil.adicionarMensagemErro("ex.getMessage()");
			e.printStackTrace();
		}

	}

	public void carregarCadastro() {

		try {

			if (codigo != null) {

				FuncionariosDAO fdao = new FuncionariosDAO();

				funcionario = fdao.buscarPorCodigo(codigo);

			} else {
				funcionario = new Funcionario();

			}

		} catch (RuntimeException e) {
			JSFUtil.adicionarMensagemErro("ex.getMessage()");
			e.printStackTrace();
		}

	}

	public void carregarNome() {

		try {

			if (nome != null) {

				FuncionariosDAO fdao = new FuncionariosDAO();

				funcionario = fdao.buscarPorNome(nome);

			} else {
				funcionario = new Funcionario();

			}

		} catch (RuntimeException e) {
			JSFUtil.adicionarMensagemErro("ex.getMessage()");
			e.printStackTrace();
		}

	}

	public void novo() {
		funcionario = new Funcionario();
	}

	public void salvar() {

		try {
			FuncionariosDAO fdao = new FuncionariosDAO();
			fdao.salvar(funcionario);

			funcionario = new Funcionario();

			JSFUtil.adicionarMensagemSucesso("Funcionário salvo com sucesso!");

		} catch (RuntimeException e) {
			JSFUtil.adicionarMensagemErro("ex.getMessage()");
			e.printStackTrace();
		}
	}

	public void excluir() {
		try {
			fdao.excluir(funcionario);

			JSFUtil.adicionarMensagemSucesso("Funcionário excluido com sucesso!");

		} catch (RuntimeException e) {
			JSFUtil.adicionarMensagemErro("Não é possível excluir um funcionário que tenha uma venda associado!");
			e.printStackTrace();
		}
	}

	public void autenticar() {
		try {
			// Recebe login e senha do usuário e chama método DAO para autenticar
			funcionario = fdao.autenticar(funcionario.getCpf(), (funcionario.getSenha()));
			// Verifica se o funcionário é nulo ou diferente
			if (funcionario == null) {
				JSFUtil.adicionarMensagemErro("Usuário ou senha invalida");
			} else {
				// Redireciona para página principal após autenticar o funcionário.
				FacesContext.getCurrentInstance().getExternalContext().redirect("principal.xhtml");
			}
		} catch (IOException erro) {
			erro.printStackTrace();
			Messages.addGlobalError(erro.getMessage());
		}
	}

	public void editar() {
		try {
			FuncionariosDAO fdao = new FuncionariosDAO();
			fdao.editar(funcionario);

			JSFUtil.adicionarMensagemSucesso("Funcionário editado com sucesso!");

		} catch (RuntimeException e) {
			JSFUtil.adicionarMensagemErro("ex.getMessage()");
			e.printStackTrace();
		}
	}
}

Template

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<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:p="http://primefaces.org/ui"
	xmlns:ui="http://java.sun.com/jsf/facelets">

<ui:insert name="metadata" />

<h:head>
	<link rel="shortcut icon" href="../resources/images/favicon.ico" />
	<h:outputStylesheet library="css" name="style.css" />
	<h:outputScript library="js" name="scripts.js" />
	

	<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
	<title>Cronus - Software de gestão</title>
</h:head>
<h:body>
	<p:growl id="msgGlobal" />

	<h:body>

		<p:layout fullPage="true">

			<p:layoutUnit header="Sistema de Vendas" position="north" 
				resizable="false" closable="false" collapsible="false">
				<h:graphicImage url="../resources/images/sistema.jpg"/>
					<p:toolbar style="height:39px;">
					<f:facet name="left">
						<p:outputLabel value="Colocar o nome do Funcionario Logado"
							style="position: relative;left: 1360px;" />
						<p:commandButton action="/pages/autenticacao.xhtml" value="Sair"
							style="height:39px;width:90px; text-align:center;position: relative;left: 1370px;"/>
					</f:facet>
				</p:toolbar>
			</p:layoutUnit>

			<p:layoutUnit header="Copyright 2019 - Todos os direitos reservados. Feito por Jackson F. Magnabosco"
				position="south" resizable="false" closable="false"  collapsible="false">
			</p:layoutUnit>

			<p:layoutUnit header="Menu Inicial" size="200" position="west"
				resizable="false" closable="false" collapsible="false">
				<h:form>

					<p:panelMenu
						style="background-image: url('../images/sistema.jpg');">
						<p:submenu label="Arquivo">
							<p:menuitem value="Página Principal"
								outcome="/pages/principal.xhtml" />
							<p:menuitem value="Sobre"
							outcome="/pages/sobre.xhtml" />
							<p:menuitem value="Sair"
							outcome="/pages/autenticacao.xhtml" />
						</p:submenu>

						<p:submenu label="Cadastros">
							<p:menuitem value="Produtos"
								outcome="/pages/produtoPesquisa.xhtml" />
							<p:menuitem value="Fornecedores"
								outcome="/pages/fornecedorPesquisa.xhtml" />
							<p:menuitem value="Funcionários"
								outcome="/pages/funcionarioPesquisa.xhtml" />
						</p:submenu>

						<p:submenu label="Vendas">
							<p:menuitem value="Nova Venda"
								outcome="/pages/vendaCadastro.xhtml" />
						</p:submenu>
						<p:submenu label="Relatórios"></p:submenu>

					</p:panelMenu>

				</h:form>

			</p:layoutUnit>

			<p:layoutUnit position="east" size="200" header="Mensagens"
				style="text-align:center;" resizable="false" closable="false "
				collapsible="true" effect="drop">
			</p:layoutUnit>

			<p:layoutUnit position="center" resizable="false" closable="false"
				collapsible="false">
				<ui:insert name="conteudo" />
				<h:panelGrid>
					<p:graphicImage library="images" name=".jpg" />
				</h:panelGrid>

			</p:layoutUnit>
		</p:layout>

	</h:body>
</h:body>
</html>

Tenta mudar o escopo da classe FuncionarioBean para @SessionScoped e vê no que da!

Os escopos disponíveis para um managed bean são:

  • "@"NoneScoped: o managed bean será instanciado a cada vez que for referenciado.
  • "@"RequestScoped: o managed bean será instanciado uma única vez dentro da requisição HTTP e descartado assim que a resposta for enviada ao usuário.
  • "@"ViewScoped: o managed bean será instanciado e mantido ativo até que o usuário navegue para uma próxima página.
  • "@"SessionScoped: o managed bean será instanciado e mantido ativo até que a sessão do usuário seja invalidada ou o tempo limite seja atingido. Como cada usuário possui sua própria sessão, o managed bean não pode ser compartilhado entre os usuários.
  • "@"ApplicationScoped: o manged bean será instanciado e mantido ativo durante todo o tempo de execução da aplicação. Permite que um maneged bean seja compartilhado com todos os usuários.

Da uma olhada neste link

1 curtida

So está entre aspas pois o GUJ identifica como citação de usuário kkkkk

Abraço

1 curtida