JSF Utilizando Session

8 respostas
L

Galera…

Estou acostumado com frameworks action-based, tipo struts e mentawai e estou com dificuldades eu um determinado aspecto do JSF.
A idéia do JSF é ter um Managed Bean por página certo? Então… Nos meus sistemas action-based eu sempre fazia o login de um usuario, e fazia session.setAttribute(“usuario”, usuario); para coloca-lo na sessao.

Como vocês implementam isso em JSF? Pelo que entendi em JSF você não coloca uma propriedade em sessão, e sim um MBean. Vocês colocariam um MBean inteiro na sessão para poder armazenar o usuário?

Estou um pouco confuso

8 Respostas

alberto_ribeiro

Boa noite, eu coloco meu MB com o escopo de session…

[]'s

D

Eu faço login pela session.setAttribute(‘usuario’,usuario) mesmo, pois eh mto interessante na utilizacao de filtros do servidor web.
No caso das MB, eu costumo utilizar apenas para dados, por exemplo, a SessionBean eu utilizo todos os outros dados do usuario que poderao ser acessados em uma ou mais paginas, sem precisar buscar do banco novamente…

dica: utilize os MB para os dados que voce precise usar nas views, e a session.setAttribute no caso de filtros.

L

entendi
mas tipo, digamos que minha página tenha 10 campos, e eu só preciso de 5 deles na sessão, que irei utilizar em páginas seguintes
vocês colocam o MBean inteiro na sessão mesmo assim? é esse tipo de situação que ta me deixando confuso

D

Bom, primeiro vc precisa entender o escopo dos managed beans… request, session e application… esses tipos de escopos de mb nao tem nada haver com a session e request do container, sao coisas bem distintas…

se vc utiliza o netbeans, ao criar um projeto jsf ele cria automaticamente 3 classes, cada uma com um escopo diferente, que sao chamadas de RequestBeans, SessionBean e ApplicationBean… se vc precisa de dados que permaneçam numa sessão para utilizar em diversas telas, crie os atributos na SessionBean.

A session da jsp vc não precisa utilizar, exceto em casos especiais como filtro de acesso a pagina por exemplo. Portanto, a managed bean vc nao precisa colocar na session, pois a faces-config mantem a mb na memoria de acordo com o escopo. Lembrando que as views da jsf tem acesso apenas somente aos managed beans configurados.

se puder, procure o Livro Core Java Server Faces, pois lá define com maior clareza, aí acho que voce conseguirar entender melhor.

L

Então, eu li esse livro Core Java Server Faces, mas mesmo assim essa parte do que vai em cada Managed Bean ainda ta meio confusa pra mim

Vocês tem algum projeto ou conhecem algum projeto open source de nível médio pra eu poder dar uma olhada e ter um exemplo?
Os tutoriais que encontro na net são muito básicos, precisava de algo + completo

L

Um exemplo…
Digamos que você tenha um LoginMBean, que contem o método logar().
E digamos que eu não não precise do usuário pro filtro, como citado pelo diegopctba.
O que vocês fariam? Colocariam esse LoginMBean na sessão mesmo? Com uma propriedade Usuario no caso?

M

Eu não costumo colocar o bean inteiro na sessão não…

Seguindo seu exemplo de login que não tem filtro … :smiley:

Crio um ManagedBean para representar o usuario

public class UserMB {
  private String nome;
  private String senha;

 // gets and sets

Este MB defino no faces-config com escopo de sessão.

<managed-bean>
        <managed-bean-name>UserMB</managed-bean-name>
        <managed-bean-class>exemplo.marcelo.gomes.UserMB</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>

Em seguida crio o meu MB que vai “representar” a página loginJSP com todos os métodos e atributos adicionais que precisar para esta págia e coloco também o atributo UserMB

private UserMB userMB;

  //get and sets

E coloco o UserMB com escopo de request, mas com a propriedade UserMB.

exemplo do faces-Config.

<managed-bean>
        <managed-bean-name>loginMB</managed-bean-name>
        <managed-bean-class>exemplo.marcelo.gomes.LoginMB</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
        <managed-property>
            <property-name>userMB</property-name>
            <value>#{UserMB}</value>
        </managed-property>
    </managed-bean>

Nas outras página que precisar acessar/ trocar o conteudo de userMB eu declaro da mesma forma que foi feito em loginMB.

Se alguém não entendeu é só perguntar… tenho um exemplo disso feito no NetBeans 6.7 que fiz para explicar para um amigo meu… se alguém quiser é só dizer!!!

Caso alguém ache que esta tem algum problema diga também… assim vou melhorando minhas soluções :smiley:

abraço

Marcelo Gomes

L

entendi
foi bem esclarecedor, vou fazer uns testes aqui
vlw =]

Criado 15 de setembro de 2009
Ultima resposta 16 de set. de 2009
Respostas 8
Participantes 4