Jsf + sessao

4 respostas
J

galera,

a minha duvida ja foi resolvida soh quero saber opinoes se essa eh a unica ou melhor forma de resolver

a questao eh manipular um bean na sessao. Eu entendia que toda vez que eu quisesse interagir o bean com o usuario era soh colocar na sessao (via faces-config). Mas se eu to numa tela, e vou para outra tela…usando outro bean, o bean anterior era perdido.

Exemplo, tenho um usuarioBean e ta no escopo sessao. Entao vou para o cadastroBean e quero recuperar o usuarioBean, mas ele vem nulo.

Resolvi dessa forma:

FacesContext contexto = FacesContext.getCurrentInstance(); HttpSession session = (HttpSession) contexto.getExternalContext().getSession(false); session.setAttribute("emissor", loginObtido

e recupero assim

eh necessario mesmo ficar fazendo isso, mesmo tendo definido como session no faces-config?

4 Respostas

J

esse mesmo caso que citei acima, ta dando problema hora de ir pra tela

to fazendo assim no backbean

public class CadastroBean 
{
                 private Cadastro cadastro = new Cadastro();

Usuario usuario = (Usuario)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("usuarioMB");
		cadastro.setUsuario(usuario);

//get 
...
//set
...

ao ir pra jsp, to fazendo assim

<h:outputText value="#{cadastroBean.cadastro.usuario.nome}"/>

mas ta aparecendo vazio os dados do usuario.

Ao debugar, eu recuperei o usuario da sessao e coloquei dentro de cadastro. Ate ai os dados tao chegando certinho…debugando eu vi os dados corretamente. Mas nao chega na tela, pq?

vitenho

eh melhor usar container DI do jsf

http://www.guj.com.br/posts/list/132822.java

valeu

gomesrod

Bom, não sei se você já fez isso, mas vou dar a dica mesmo assim:

Não é necessário fazer essa manipulação dos dados da Sessão via código. Se você tem um managed-bean Usuario (escopo de Sessão) e quer recupera-lo no managed-bean Cadastro (qualquer escopo), o jeito mais fácil é o seguinte:

Primeiro defina normalmente o bean Usuario, como já esta fazendo:

<managed-bean> <managed-bean-name>usuario</managed-bean-name> <managed-bean-class>meu.pacote.Usuario</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean>

Na classe Cadastro, crie o atributo:

public class Cadastro { private Usuario usuario; // get e set para o atributo usuario // Resto do código da classe }

Ao definir o bean Cadastro no faces-config é que você manda o container injetar o objeto Usuario automaticamente, através da tag managed-property

<managed-bean> <managed-bean-name>cadastro</managed-bean-name> <managed-bean-class>meu.pacote.Cadastro</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> <managed-property> <property-name>usuario</property-name> <property-class>meu.pacote.Usuario</property-class> <value>#{usuario}</value> </managed-property> </managed-bean>

Quanto ao problema do dado que não aparece na tela, ainda não entendi bem o que acontece, mas espero ter ajudado

J

ja descobri o problema…ou eh lixo ou eh cache do navegador.

debugando o sistema eu vejo que ele recupera certinho da sessao mas nao exibe nada na tela. Achei estranho isso acontecer porque soh isso ta dando problema, o resto no sistema ta ok.

dai pra fazer um teste, eu adicionei mais um campo na tela exibindo o campo observacao, e mesmo assim nao apareceu. é como se o eclipse nao tivesse mais pegando a atualizacao e exibindo os class antigo.

qualquer mudanca que estou fazendo agora, nao esta mais refletindo na tela…

mesmo eu ia no explorer, e apagando o classes, ele ta gerando da mesma forma e nao ta exibindo as atualizacoes.

alguem ja teve esse problema?

Criado 28 de julho de 2009
Ultima resposta 1 de ago. de 2009
Respostas 4
Participantes 3