Em aplicações JavaServer Faces a partir da versão 2.0, uma possibilidade bastante interessante para definir o escopo em que um Managed Bean será armazenado é utilizar anotações.

Atualmente é possível especificar um dos seguintes escopos de armazenado para uma classe:

  • @ApplicationScoped: Escopo de aplicação, permanece existente entre todas as interações de todos os usuários, ou seja possui vida útil durante todo o tempo em que a aplicação estiver funcionando.
  • @SessionScoped: Escopo de sessão, permanece ativo em várias requisições HTTP enquanto durar a sessão do usuário.
  • @ViewScoped: Escopo de página, persisti durante a interação do usuário com uma única página. Enquanto a página existir uma instância do Managed Bean existirá.

    Exemplo: Quando uma página é solicitada o Managed Bean é instanciado, após a página ser fechada a instância é eliminada. Uma nova instância será criada somente quando a página for solicitada.

  • @RequestScoped: Escopo de requisição. Existe durante uma única solicitação/requisição HTTP.

É importante observar que se o escopo de um Managed Bean for definido como de sessão(@SessionScoped) é necessário cuidado para garantir a segurança da execução de threads, isso porque casos como de “javax.faces.component.UIComponent” precisa rodar dentro de um único segmento.

Outras anotações também estão disponíveis, porém são utilizadas com menor frequência, são elas:

  • @NoneScoped: Indica que o escopo não está definido para a aplicação.
  • @CustomScoped: Escopo personalizado.

Crie o managed bean mostrado abaixo em uma aplicação para testes, e alterne o escopo, linha 6 para os apresentados acima e acompanhe a saída de log do construtor, linha 17. Assim você poderá comprovar em quais momentos seu managed bean será criado durante o ciclo de vida da sua aplicação.

import java.util.logging.Logger;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

@ManagedBean
@ViewScoped
public class Toy implements Serializable {
    private static final long serialVersionUID = -8393937275773764989L;

    private Logger logger = Logger.getLogger(this.getClass().getName());

    /**
     * Construtor padrão.
     */
    public Toy() {
        super();
        logger.info("--- construtor executado ---");
    }
}

Se não conseguir visualizar a saída do log na linha 17, substitua a referida linha por:

System.out.println("--- construtor executado ---");

Por enquanto é isso, até o próximo post.

Um comentário para “Escopos de Managed Bean em JSF com Annotations

  1. Pingback: Eager Application-Scoped em ManagedBean

Deixe um comentário

Campos obrigatórios são marcados *

Post Navigation