Duvida ManagedBean. O que é realmente?

Primeiramente queria dizer que não sei se é neste local o apropriado para minha duvida, mas ai vai.

Vejo falar muito em ManagedBean, mas não consigo entender o que é realmente, para que serve, num exemplo pratico.

Entendo que o DAO é a classe que faz meu acesso normalmente ao banco de dados.
o Bean, é a classe onde estão meus dados e muitas vezes comportamento, ex: Classe NotaFiscal…
O que seria meu ManagedBean? já vi anotações do tipo @ManagedBean(name=“xxx”) . Quando usar isto.

Obrigado pela ajuda e compreensão de todos

Rodrigo

Os managedBean você provavelmente os viu no jsf que é um framework mvc.
A função do managebean é estar intermediando entre a página e o seu modelo.

Por exemplo você quer colocar em jsf uma lista com informações que venham do seu banco de dados.

Na sua página você chama o código dessa maneira

 <p:dataTable var="dados tabela" value="#{tabela.objetos}">  

E você em sua classe implementa desse modo.

@ManagedBean(name="tabela")
@RequestScoped
public class TabelaBean{

public void List<Objeto> getObjetos(){
//codigo
return  listaObjeto;
}
}

Para ficar mais claro dá uma lida em java ee 6, jsf 2.0 e também em EL

espero ter ajudado.

O termo managed bean não foi um termo apropriado escolhido pelos propositores do JSF, porque qualquer bean pode ter seu estado managed por qualquer contêiner, seja spring, CDI, inclusive JSF. Logo, qualquer bean gerenciado pelo container é um managed bean.

Acho que entendo onde a sua dúvida está apertando, pois sempre aparece uma mensagem privada para mim perguntando alguma coisa sobre esses famigerados JSF managed bean.

O que você precisa ter em mente, num primeiro lugar, é que um managed bean é um bean gerenciado pelo contêiner, nesta caso, um contêiner JSF, que é muito modesto em relação a outros contêineres do mercado.

Em segundo lugar, um managed bean gerenciado pelo JSF pode exercer diferentes papéis em sua aplicação, entre eles:

  • Managed-bean de modelo: o nome já é explicativo;

  • Backing Managed-Bean: geralmente relação 1:1 com a view, mas é uma definição controversa, pois há desenvolvedores que chamam de backing bean os componentes que estão em “binding” com algum objeto da view. Geralmente possui apenas actionListeners e componentes que representam UI de uma página (view);

  • Managed-Bean de Controle: geralmente executa alguma lógica e retorna a navegação. Apenas métodos “action” e não “actionListeners”;

  • Managed-bean de suporte: dá suporte para algum UI na tela do usuário, por exemplo, com os dados de uma combobox;

  • Managed-bean utilitário: algum bean usado por várias aplicações.

O que aparece muita vezes, é um managed bean JSF exercendo mais de um papel, ou seja, tudo vai depender de como o desenvolvedor quer enxergar/organizar sua aplicação.

Eu já abandonei JSF managed bean há muito tempo (e foi uma decisão arriscada) em favor de CDI managed beans, que são muito superiores.

2 curtidas

[quote=Flavio Almeida]O termo managed bean não foi um termo apropriado escolhido pelos propositores do JSF, porque qualquer bean pode ter seu estado managed por qualquer contêiner, seja spring, CDI, inclusive JSF. Logo, qualquer bean gerenciado pelo container é um managed bean.

Acho que entendo onde a sua dúvida está apertando, pois sempre aparece uma mensagem privada para mim perguntando alguma coisa sobre esses famigerados JSF managed bean.

O que você precisa ter em mente, num primeiro lugar, é que um managed bean é um bean gerenciado pelo contêiner, nesta caso, um contêiner JSF, que é muito modesto em relação a outros contêineres do mercado.

Em segundo lugar, um managed bean gerenciado pelo JSF pode exercer diferentes papéis em sua aplicação, entre eles:

  • Managed-bean de modelo: o nome já é explicativo;

  • Backing Managed-Bean: geralmente relação 1:1 com a view, mas é uma definição controversa, pois há desenvolvedores que chamam de backing bean os componentes que estão em “binding” com algum objeto da view. Geralmente possui apenas actionListeners e componentes que representam UI de uma página (view);

  • Managed-Bean de Controle: geralmente executa alguma lógica e retorna a navegação. Apenas métodos “action” e não “actionListeners”;

  • Managed-bean de suporte: dá suporte para algum UI na tela do usuário, por exemplo, com os dados de uma combobox;

  • Managed-bean utilitário: algum bean usado por várias aplicações.

O que aparece muita vezes, é um managed bean JSF exercendo mais de um papel, ou seja, tudo vai depender de como o desenvolvedor quer enxergar/organizar sua aplicação.

Eu já abandonei JSF managed bean há muito tempo (e foi uma decisão arriscada) em favor de CDI managed beans, que são muito superiores.
[/quote]

Flávio,como seriam esses CDI managed beans que vc se refere,seria algo equivalente a anotar o MB com um @Component do Spring?

Em CDI, qualquer bean instanciado pelo contêiner é um managed bean, mas para acessar o bean via EL em sua view, você precisa usar a anotação @Named.
Há também os escopos padrão: @SessionScoped, @RequestScoped e @ApplicationScoped. Não há @ViewCoped em CDI, então, caso você precise deste escopo, ou você desenvolve um CDI custom escope ou utiliza a implementação de alguém. Eu recomendo a do MyFaces CODI, mas tem também a do Seam faces.

Se você quer utilizar JSF com CDI beans, não deixe de visitar http://myfaces.apache.org/extensions/cdi/

1 curtida

Ele é um Pojo gerenciado pelo jsf, ele deve ser informado para o jsf que existe por anotations 2.0 ou xml 1.2, ele pode ter vários funções e varios escopos em uma aplicação, quando for usado para receber parametros o FacesServlet que se encarrega de fazer essa ponte entre o browser ew o managed bean.
Gostaria de saber porque cdi é tão melhor ?