O que é e como usar MANAGED BEANS

Oi pessoal,

Já estou estudando desenvolvimento web há alguns meses e pesquisei muito para encontrar uma definição clara sobre managed beans, porém não encontrei.
Por enquanto o que eu entendi é o seguinte:

Bean

  • uma classe com construtor sem parâmetros
  • conter métodos assessores (getters e setters) para os atributos
  • deve conter regras de negócio ???

Managed Beans

  • são os beans gerenciados pelo JSF, ou seja, são os beans que o JSF enxerga.
  • tb deve ter o construtor vazio ???
  • deve conter regras de negócio ???

Aprecio a ajuda de todos para poder esclarecer de uma vez por todas o conceito de Managed Beans.

Boa noite.

Isto vai lhe ajudar, creio eu:

Mas no meu ponto de vista, o ideal seria criar um Back Bean e um Managed Bean, onde no bean você teria todos os atributos que se fizerem necessários, como algo para “gravar” um nome, idade, cpf e assim por diante, de acordo com sua view. Desta forma, o Managed Bean ficaria responsavél pelo acesso ao Back Bean apenas para buscar as informações mas todos os métodos necessário ficaram nele, assim, o código fica mais legível e fácil de entender.

Abraços e boa leitura.

Mas a lógica ficaria no Managed Bean?

Vamos lá: Bean é totalmente diferente de Managed Bean. Só são iguais no nome.

Bean é uma definição antiga, do tempo em que se achava que os desenvolvedores Java iriam programar visualmente. Beans eram classes que tinham construtores vazios, além de métodos getters e setters. Não haveria outros métodos porque uma ferramenta visual não iria detectá-los. A ideia nunca deu certo, o conceito foi ampliado por frameworks independentes (como o Spring), mas caiu em desuso com o uso de anotações. Getter e setter, hoje em dia, só é util para ser consumido por expressões JSTL.

Managed Beans teve seu conceito ampliado, não é só usado pelo JSF, mas pelo CDI também. O conceito é bem genérico: um managed bean é um objeto gerenciado pelo contâiner, podendo ter dependências injetadas. Só precisa ter o construtor vazio. Não há nenhuma diretriz com relação ao uso do Managed Bean, se vai haver ou não regra de negócio dependerá de como será usado e em qual camada seu objeto pertence.

Leonardo,

Fiquei até emocionado aqui com a explicação, coesa!

Bem, vou dar um exemplo e gostaria de saber como vc programaria.

Sei lá, tenho uma agenda. Nela tenho uma classe Contato e dentro de Contato tenho ArquivosCompartilhados.
O que vc transformaria em Managed Beans? O que vc persistiria no banco?

Vejo gente fazendo o seguinte:

@ManagedBeans public class ContatoMB{ Contato contato; ...

Daí no xhtml:

nome: <inputText value="#{contatoMB.contato.nome}" />

Deixando a lógica nos Managed Beans e deixando apenas o estado no banco através do “contato”.