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
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.
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
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
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.
ricardo13
A annotation @ManagedProperty está disponível para a versão 1.2 ??
Ricardo
dev.rafael
Ñ. Na versão 1.2 vc precisa usar o faces-config.xml p/ configurar ManagedProperties: