Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

@ManagedBean x @Named

Já vi em alguns posts de foruns Java a recomendação para que a partir do Java EE 6, se o projeto estiver usando CDI, utilizar o @Named no lugar do @ManagedBean mesmo para beans do JSF. Está correto? Qual é o motivo ?

4 respostas

Olá Marco! Creio que o motivo seja que a anotação @Named é mais geral para a utilização de JavaBean enquanto @ManagedBean é específico para JSF.

Espero ter ajudado! Bons Estudos!

Oi Romário, ajudou sim e obrigado por responder.

Acredito ter entendido. Significa que eu vou poder injetar o mesmo bean em objetos de outras frameworks também, não só do JSF.

Agora me ocorreu mais uma questão: Não existe nenhuma característica do JSF que eu fique impedido de aproveitar pelo fato do meu JavaBean ter sido anotado com @Named ao invés de @ManagedBean ?

Obrigado.

solução!

Marco, não estará impedido de nada. Qual o motivo? Pegando carona na resposta do Romário, o @Named permite expor qualquer objeto através de expression language (EL) na view, inclusive um EJB. O antigo @ManagedBean não permitia nenhum bean de outro container (JSF é um container, EJB é outro container) ser exposto na view. Isso era chato, porque se você quisesse export um EJB por sei lá qual motivo, você teria que fazer um lookup em um bean com @ManagedBean para então expor o EJB via Expression language. Veja que foi necessário uma "passarela" para que o EJB chegasse até a view.

E o que é um container? É isso mesmo que o nome diz. Quem dá new em um bean anotado com @ManagedBean? O JSF! Quem dá new em um bean anotado com @Named? CDI! Como eles dão new para nós, o bean vive em um container. É ai que coisas maravilhosas acontecem.

Um bean que vive no container CDI ganha poderes que um bean dentro de um container JSF não possui como interceptadores, observadores, producers, etc. É por isso que o @ManagedBean estará deprecated, porque ele dá muito pouco poder aos beans criados pelo container JSF. Todo o restante do JSF que vc conhece continua o mesmo, só muda em qual container o bean ficará.

Espero ter ajudado.

Legal, obrigado !