Deixa eu ver se entendi bem: Voce tem um managed bean UsuarioLogado declarado com escopo de session. Em seu codigo, vc INSTANCIA ele e o seta em algum lugar que ate agora nao consegui ver como foi implementado.
Esta funcao que voce diz ser do proprio framework, na verdade ele nao existe. Ou ao menos eu desconheco. De que classe voce o esta chamando? Pra mim, parece mais uma customizacao feita por alguem.
//Função do próprio framework JSF;
setBean(“UsuarioLogado”, usuarioLogado);
Tudo indica que dentro de uma requisicao pra outra, o atributo nao eh perdido. Ate aonde entendi eh da segunda requisicao em diante que voce esta perdendo o atributo. Isso eh um comportamento perfeitamente normal ao se trabalhar com Request. Ainda assim, como vc disse que esta trabalhando com Session, entao de fato eh estranho.
Enfim, acredito que existe outra forma muito mais simples de resolver este problema. Tenta o seguinte:
class UsuarioLogadoMBean {
private Usuario usuario;
// setters e getters
public void logar() {
// utilize sua logica dentro do servico
usuario = usuarioService.obter();
}
}
// seu xhtml / jsp
<body>
<h:form>
<!-- neste ponto, nenhuma customizacao eh necessaria realizar, ja que o managed bean eh de sessao -->
<h:commandLink action="#{usuarioLogadoMBEan.logar}"
</h:form>
</body>
Feito isso, tenta dentro do seu managed bean obter o referido objeto. Uma forma de fazer isso seria atraves do FacesContext.getInstance().getExternalContext().getRequest().getSession().getAttribute(“usuarioLogadoMBean”) (nao tenho certeza se eh nessa ordem as chamadas de metodos), o que acredito que getBean da sua implementacao deve estar fazendo isso.
Outra coisa, voce disse que o outputlink eh utilizado para navegar pra outra pagina. Porque vc nao usa o h:commandLink? Este ai seria o mais aproprieado!
Nao sei se isso ajudaria, mas perde uns 5 minutinhos pra ver.
Abracos