Estou fazendo um exemplo de Login/Senha sendo que, quando o usuário loga no sistema o objeto USUARIO (uma entidade) é inserido na sessão.
Por exemplo,
Se o usuário logar, ele será redirecionado para outra página (“editUser.xhtml”). O Managed-bean responsável por essa página (“editUser.xhtml”) vai pegar o objeto na sessão e instanciar as informações contidas na página com os dados do objeto.
Eu estou acessando o objeto na sessão da seguinte forma.
HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
Usurio u = (Usuario) session.getAttribute("USUARIO");
Quando vou fazer deploy, o Tomcat mostra um NULLException. Se por acaso eu comentar essas duas linhas, o sistema é implantado normalmente.
Lembrando que esse trecho de código acima foi colocado no construtor do MB.
Quando você passa o parâmetro false, você está dizendo ao container para que não crie uma nova sessão caso esta não exista. Mude o parâmetro para true, que o container criará automáticamente a sessão e, provavelmente, o problema irá parar.
Ñ user a sessão da Servlet p/ armazenar coisas, crie ManagedBeans em escopo de sessão p/ isso.
Bom, outra coisa que eu eskeci de mencionar (não sei se é relevante) é que estou usando SPRING 2.5
Não estou usando as annotations do JSF (@ManagedBean, @RequestScoped, …)
Meu código está mais ou menos assim
@Component("verificaLoginSenhaMB")publicclassVerificaLoginSenhaimplementsSerializable{privateUseruser;privateUserServiceuserService;publicUsergetUser(){returnuser;}publicStringlogin(){if(usuario_existe)//adiciona a variável user na sessão e redireciona (navigation-rule) para outra página}publicStringlogout(){...}
Quando você passa o parâmetro false, você está dizendo ao container para que não crie uma nova sessão caso esta não exista. Mude o parâmetro para true, que o container criará automáticamente a sessão e, provavelmente, o problema irá parar.
Tentei todas as combinações possíveis entre TRUE e FALSE tanto no set quanto get da sessão (medida de desespero, rs) e nada.
O NULLException permaneceu.
Ricardo
D
dev.rafael
Eu nunca mexi com Spring mas, ele ñ permite q vc especifique outros escopos p/ os seus ManagedBeans?
PS.: vc ñ deveria usar verbos como nomes de classes.
R
ricardo13
dev.rafael:
Eu nunca mexi com Spring mas, ele ñ permite q vc especifique outros escopos p/ os seus ManagedBeans?
PS.: vc ñ deveria usar verbos como nomes de classes.
Vou ver e também vou alterar os nomes dos MBs.
Ricardo
R
ricardo13
olá pessoal,
Depois de mexer bastante eu consegui fazer funcionar.
Mas eu acredito que dessa forma que está funcionando não está correta.
Eu consegui recuperar o objeto da sessão utilizando o FacesContext, mas somente se, o MB estiver com o escopo de sessão (session).
É verdade isso ??
Eu não vi nos artigos falando nada sobre isso.
Ricardo
D
dev.rafael
Ñ use HttpSession. O JSF oferece uma ótima abstração da camada WEB. Sempre q vc quiser dados no escopo de sessão use ManagedBean no escopo de sessão. Vc sempre pode usar ManagedProperties p/ obter esse ManagedBeans apartir de outros ManagedBeans.
R
ricardo13
A annotation @ManagedProperty está disponível para a versão 1.2 ??
Ricardo
D
dev.rafael
Ñ. Na versão 1.2 vc precisa usar o faces-config.xml p/ configurar ManagedProperties: