Controller Managed-Bean


O Controller Managed-Bean é um tipo de managed bean no contexto do JavaServer Faces (JSF) que participa da camada de Controller no padrão de design MVC (Model-View-Controller).

Sua principal função é atuar como intermediário entre a camada de apresentação (View) e a camada de lógica de negócios (Model).

Ele é responsável por processar a lógica de negócios, realizar ações específicas e decidir o próximo destino de navegação na aplicação (como qual página ou vista exibir a seguir).

Características

Escopo Comum

Normalmente, o escopo é request scoped (@RequestScoped), já que a maioria das ações executadas em um controller são relacionadas a uma única requisição HTTP.

Função

O controller executa a lógica de negócios da aplicação, como validar dados ou chamar métodos de serviços, e após isso, decide a navegação (qual página ou fluxo deve ser seguido a seguir).

Métodos de Ação

Um controller bean geralmente possui métodos de ação (não actionListener), que são acionados diretamente por eventos da interface de usuário (ex.: cliques de botões ou seleções de menus).

O controller é responsável por retornar uma “navegação de destino” (geralmente uma string que representa uma página ou fluxo), que será processada pelo JSF Navigation Handler para decidir qual página será exibida.

Caso de uso

O controller bean pode ser usado para realizar operações como salvar um objeto em um banco de dados ou processar informações antes de redirecionar para uma outra página.

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="#{controllerBean.name}" />
 
        <p:commandButton value="Salvar" action="#{controllerBean.save}" update="result" />
        
        <h:outputText id="result" value="#{controllerBean.message}" style="margin-top:10px;display:block;" />
    </h:form>
</h:body>
</html>

Controller Managed-Bean

import jakarta.faces.bean.ManagedBean;
import jakarta.faces.bean.RequestScoped;
 
@ManagedBean
@RequestScoped
public class ControllerBean {
    private String name;
    private String message;
 
    // Getters e Setters
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getMessage() {
        return message;
    }
 
    public void setMessage(String message) {
        this.message = message;
    }
 
    // Método de ação chamado pelo botão
    public String save() {
        // Lógica de negócios: validação, processamento de dados, etc.
        if (name != null && !name.isEmpty()) {
            message = "Usuário " + name + " salvo com sucesso!";
            return "successPage"; // Navegação para a página de sucesso
        } else {
            message = "Erro: Nome não pode ser vazio!";
            return null; // Permanece na mesma página com a mensagem de erro
        }
    }
}
  1. Entrada de Dados:

    • O usuário insere seu nome no campo Nome.
  2. Ação de Salvar:

    • O botão Salvar chama o método save() no controller-bean.
  3. Processamento de Lógica de Negócios:

    • No método save(), é feita uma validação simples: se o nome não estiver vazio, ele exibe uma mensagem de sucesso, caso contrário, exibe uma mensagem de erro.
  4. Navegação:

    • Se a validação for bem-sucedida, a string "successPage" é retornada, indicando que o JSF deve redirecionar para a página de sucesso (successPage.xhtml).
    • Se o nome estiver vazio, o retorno é null, o que faz com que o JSF permaneça na mesma página e apenas atualize a mensagem de erro.

Referências


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