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.