ManagedBean

Boa tarde!
Estou fazendo uns exercícios de java web por um livro.

Nesse livro pede para eu adicionar as anotações @ManageBean e @RequestScoped.

Mas quando coloco elas na minha classe da um Warning e as anotações ficam vermelhas. “The type ManagedBean is deprecated”

Alguém sabe me explicar o por que? e como resolver?

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;

@ManagedBean(name=“usuarioBean”)
@RequestScoped
public class UsuarioBean {

private String nome;
private String email;
private String senha;
private String confirmaSenha;

Aqui tem um topico semelhante. O que acontece é que com as atualizações do java, alguns objetos vão se tornando obsoletos, pois eles criam melhores, por isso da o Warning, mas não da erro, você consegue utilizar dessa maneira, mas é recomendado usar a nova, pois você já começa a aprender desatualizado.

O @ManagedBean foi descontinuado, o melhor é usar @Named do CDI.
Se você utiliza glassfish, o CDI ja vem junto, basta criar um arquivo chamado beans.xml no WEB-INF e colocar o seguinte código nele:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="
      http://java.sun.com/xml/ns/javaee 
      http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
</beans>

Se o CDI tiver configurado corretamente, a sua classe ficaria assim:


@Named
@RequestScoped
public class UsuarioBean {

}

Obs: Ao usar o @Named(que é o @ManagedBean do CDI), você deve usar os escopos do CDI também.

Imports:
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;

Se ele usa glassfish ou qualquer outro application server que implemente a versão 7 da especificação JEE (ou superior).

Bah que sacanagem, então não vale apena aprender uma coisa descontinuada!!!
Mas muda muita coisa de uma pra outra?

o @Named é mais poderoso, se você for fazer o básico o @ManagedBean ja da conta

O que foi descontinuado foi o @ManagedBean, não o JSF

Mas por que a maioria dos cursos de java web com jsf ensina com @ManageBean?

Porque o @ManagedBean faz parte do JSF, além do que, quando surgiu o JSF não existia @Named
Quando o JSF surgiu, o mapeamento era feito através de xml, depois com a anotação @ManagedBean(versão 2.0) e hoje em dia é recomendado usar o @Named

Aqui tem um tópico bacaninha: https://cursos.alura.com.br/forum/topico--managedbean-x-named-15022

Para mais informações, pesquise sobre Named vs ManagedBean

Agora acho que entendi.
Obrigado.

Depende.
Tem muito código legado aí, cara.