Backing Managed-Bean


Um Backing Managed-Bean é um tipo de managed bean usado no JavaServer Faces (JSF) que desempenha um papel crucial na camada de View (apresentação) do padrão de design MVC (Model-View-Controller).

Sua principal função é suportar a lógica da interface do usuário (UI), atuando como uma ponte entre a página JSF (XHTML) e a aplicação.

Características

Escopo Comum

Geralmente utiliza o escopo de requisição (@RequestScoped), mas pode usar escopos como view ou session, dependendo da necessidade do estado.

Relacionamento 1:1 com a View

Cada backing-bean está associado a uma página JSF ou formulário em uma composição Facelet.

Propriedades Estilo JavaBean

Possui atributos com métodos get e set, que são propriedades da View, não do modelo de dados da aplicação.

Funções Auxiliares

Inclui métodos para manipular eventos JSF, como:

  • actionListener: Manipula ações como cliques de botão.
  • valueChangeListener: Manipula mudanças de valores em componentes da interface.

Casos de uso

Responsabilidade: Focar no comportamento da interface de usuário (UI), como capturar valores de entrada, interagir com componentes JSF (botões, tabelas) e delegar chamadas para a lógica de negócios (normalmente em uma camada de serviço).

Boa Prática: Deve evitar conter lógica de negócio ou lógica complexa, limitando-se ao suporte direto da interação do usuário.

Exemplo

Página XHTML (View)

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:p="http://primefaces.org/ui">
<h:body>
    <h:form>
        <h:outputLabel value="Nome: " for="name" />
        <p:inputText id="name" value="#{backingBean.name}" />
        
        <h:outputLabel value="Idade: " for="age" />
        <p:inputText id="age" value="#{backingBean.age}" />
 
        <p:commandButton value="Salvar" action="#{backingBean.save}" update="result" />
        
        <h:outputText id="result" value="#{backingBean.message}" style="margin-top:10px;display:block;" />
    </h:form>
</h:body>
</html>

Backing Managed-Bean

import jakarta.faces.bean.ManagedBean;
import jakarta.faces.bean.RequestScoped;
 
@ManagedBean
@RequestScoped
public class BackingBean {
    private String name;
    private int age;
    private String message;
 
    // Getters e Setters para as propriedades da View
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public int getAge() {
        return age;
    }
 
    public void setAge(int age) {
        this.age = age;
    }
 
    public String getMessage() {
        return message;
    }
 
    public void setMessage(String message) {
        this.message = message;
    }
 
    // Método de ação chamado pelo botão
    public void save() {
        // Lógica simples focada na interface (View)
        this.message = "Dados salvos: Nome = " + name + ", Idade = " + age;
    }
}
  1. Entrada de Dados:

    • O usuário preenche os campos Nome e Idade na interface.
    • O JSF utiliza a EL (Expression Language) para associar os valores aos atributos do BackingBean.
  2. Ação de Salvar:

    • O botão Salvar chama o método save() do backing-bean.
    • A lógica no método atualiza a mensagem que será exibida na tela.
  3. Resposta na Tela:

    • A mensagem de confirmação é exibida dinamicamente usando h:outputText, que é atualizado com a ação do botão.

Referências


https://stackoverflow.com/questions/746047/jsf-backing-bean-structure-best-practices