JSF - Managed Beans

Managed Bean é uma classe Java Bean regular registrada com JSF. Em outras palavras, Managed Beans é um Java bean gerenciado pela estrutura JSF. O bean gerenciado contém os métodos getter e setter, lógica de negócios ou mesmo um bean de apoio (um bean contém todo o valor do formulário HTML).

Beans gerenciados funcionam como modelo para o componente UI. O Managed Bean pode ser acessado na página JSF.

Dentro JSF 1.2, um bean gerenciado precisava registrá-lo no arquivo de configuração JSF, como facesconfig.xml. DeJSF 2.0em diante, os beans gerenciados podem ser facilmente registrados usando anotações. Essa abordagem mantém os beans e seu registro em um local, portanto, torna-se mais fácil de gerenciar.

Usando configuração XML

<managed-bean>
   <managed-bean-name>helloWorld</managed-bean-name>
   <managed-bean-class>com.tutorialspoint.test.HelloWorld</managed-bean-class>
   <managed-bean-scope>request</managed-bean-scope>
</managed-bean> 

<managed-bean>
   <managed-bean-name>message</managed-bean-name>
   <managed-bean-class>com.tutorialspoint.test.Message</managed-bean-class>
   <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

Usando Anotação

@ManagedBean(name = "helloWorld", eager = true)
@RequestScoped
public class HelloWorld {
   @ManagedProperty(value = "#{message}")
   private Message message;
   ...
}

@ManagedBean Annotation

@ManagedBeanmarca um bean como um bean gerenciado com o nome especificado no atributo name. Se o atributo name não for especificado, o nome do bean gerenciado assumirá como padrão a parte do nome da classe do nome da classe totalmente qualificado. No nosso caso, seria helloWorld.

Outro atributo importante é eager. Se eager = "true", o bean gerenciado é criado antes de ser solicitado pela primeira vez, caso contrário, a inicialização "preguiçosa" é usada na qual o bean será criado apenas quando for solicitado.

Anotações de escopo

As anotações de escopo definem o escopo no qual o bean gerenciado será colocado. Se o escopo não for especificado, o bean assumirá o padrão para solicitar o escopo. Cada escopo é brevemente discutido na tabela a seguir.

S.Não Escopo e descrição
1

@RequestScoped

Bean vive enquanto vive a solicitação-resposta HTTP. Ele é criado em uma solicitação HTTP e destruído quando a resposta HTTP associada à solicitação HTTP é concluída.

2

@NoneScoped

O feijão dura tanto quanto uma única avaliação EL. Ele é criado em uma avaliação EL e destruído imediatamente após a avaliação EL.

3

@ViewScoped

O bean vive enquanto o usuário está interagindo com a mesma visualização JSF na janela / guia do navegador. Ele é criado por meio de uma solicitação HTTP e destruído assim que o usuário postar em uma visualização diferente.

4

@SessionScoped

Bean dura tanto quanto dura a sessão HTTP. Ele é criado na primeira solicitação HTTP envolvendo este bean na sessão e é destruído quando a sessão HTTP é invalidada.

5

@ApplicationScoped

Bean vive enquanto vive o aplicativo da web. Ele é criado na primeira solicitação HTTP envolvendo este bean no aplicativo (ou quando o aplicativo da web é iniciado e o atributo eager = true é definido em @ManagedBean) e é destruído quando o aplicativo da web é encerrado.

6

@CustomScoped

O bean dura tanto quanto a entrada do bean no mapa customizado, que é criado para este escopo.

@ManagedProperty Annotation

JSF é uma estrutura simples de injeção de dependência (DI) estática. Usando@ManagedProperty anotação, a propriedade de um bean gerenciado pode ser injetada em outro bean gerenciado.

Aplicação de exemplo

Vamos criar um aplicativo JSF de teste para testar as anotações acima para beans gerenciados.

Degrau Descrição
1 Crie um projeto com o nome helloworld sob um pacote com.tutorialspoint.test conforme explicado no capítulo JSF - Criar aplicativo .
2 Modifique HelloWorld.java conforme explicado abaixo. Mantenha o resto dos arquivos inalterados.
3 Crie Message.java em um pacote com.tutorialspoint.test conforme explicado abaixo.
4 Compile e execute o aplicativo para ter certeza de que a lógica de negócios está funcionando de acordo com os requisitos.
5 Por fim, construa o aplicativo na forma de um arquivo war e implante-o no Apache Tomcat Webserver.
6 Inicie seu aplicativo da web usando o URL apropriado, conforme explicado a seguir na última etapa.

HelloWorld.java

package com.tutorialspoint.test;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;

@ManagedBean(name = "helloWorld", eager = true)
@RequestScoped
public class HelloWorld {
   @ManagedProperty(value = "#{message}")
   private Message messageBean;
   private String message;
   
   public HelloWorld() {
      System.out.println("HelloWorld started!");   
   }
   
   public String getMessage() {
      
      if(messageBean != null) {
         message = messageBean.getMessage();
      }       
      return message;
   }
   
   public void setMessageBean(Message message) {
      this.messageBean = message;
   }
}

Message.java

package com.tutorialspoint.test;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

@ManagedBean(name = "message", eager = true)
@RequestScoped
public class Message {
   private String message = "Hello World!";
	
   public String getMessage() {
      return message;
   }
   public void setMessage(String message) {
      this.message = message;
   }
}

home.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns = "http://www.w3.org/1999/xhtml">
   <head>
      <title>JSF Tutorial!</title>
   </head>
   
   <body>
      #{helloWorld.message}
   </body>
</html>

Quando você estiver pronto com todas as alterações feitas, vamos compilar e executar o aplicativo como fizemos no capítulo JSF - Criar Aplicativo. Se tudo estiver bem com sua aplicação, isso produzirá o seguinte resultado.