JavaServer Faces: Como utilizar métodos de ManagedBeans no XHTML

Veja neste artigo como criar uma página JSF e realizar, a partir dela, chamadas a métodos e propriedades de um ManagedBean.

Um dos grandes motivadores para a adoção do JavaServer Faces é a facilidade de implementar a comunicação entre as páginas HTML e as classes Java responsáveis por receber e tratar suas requisições: os ManagedBeans. De forma simples e direta, conseguimos fazer chamadas a métodos e atribuir valores a propriedades dessas classes com poucas linhas de código, a partir dos componentes do JSF.

Nesse artigo, demonstraremos como criar um ManagedBean e a página HTML correspondente, que irá realizar as chamadas aos métodos e atributos desse managedbean, expondo dessa forma como tal ligação pode ser feita.

Criando o ManagedBean

O ManagedBean, também conhecido por muitos como BackingBean, é a classe responsável por realizar a comunicação entre o XHTML e alguma outra camada que seu projeto possua. Por exemplo, quando estamos trabalhando com uma arquitetura MVC, essa classe atua como controller, tratando as requisições vindas do front-end. Dessa forma, não devemos, ou pelo menos devemos evitar, adicionar regras de negócio a essa classe, pois ela deve ser apenas uma ponte de comunicação entre a camada de apresentação (páginas HTML/XHTML) e as demais camadas.

No exemplo que implementaremos, nossa classe terá uma tarefa bem simples: validar um CPF passado através do XHTML pelo usuário e retornar ao navegador uma mensagem dizendo se o valor é válido ou não. O código pode ser visto na Listagem 1.

Listagem 1. ManagedBean ValidadorMB

package firstmb;

import java.io.Serializable;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;

@ManagedBean(name = "validadorMB")
@RequestScoped
public class ValidadorMB  {

/**
*
*/
private static final long serialVersionUID = 1L;

private String cpf;

public void validar() {
   if (cpf == null || "".equals(cpf)) {
       FacesContext.getCurrentInstance().addMessage("msgValidador", 
       new FacesMessage("CPF Vazio"));
   } else if (cpf.length() != 11) {
       FacesContext.getCurrentInstance().addMessage("msgValidador", 
       new FacesMessage("CPF deve ter 11 dígitos"));
   }else{
       FacesContext.getCurrentInstance().addMessage("msgValidador", 
       new FacesMessage("CPF Validado com sucesso !!"));
   }
}

public String getCpf() {
   return cpf;
}

public void setCpf(String cpf) {
   this.cpf = cpf;
}

}

Criando a página XHTML

Criaremos, agora, a página XHTML responsável por receber o valor digitado pelo usuário e acionar o método de validação do ManagedBean ValidadorMB. Seu código pode ser visto na Listagem 2.

Listagem 2. Página XHTML usando ValidadorMB

<!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"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">

<h:head>
   <title>Valida CPF</title>
</h:head>
<h:body>
   <h:form>
       <h:inputText value="#{validadorMB.cpf}" />
       <h:commandButton value="VALIDAR" 
       actionListener="#{validadorMB.validar}" />
       <h:message for="msgValidador" />
   </h:form>
</h:body>
</html>

Na linha 12, temos um componente inputText, do JSF, que usa uma Expression Language (EL Expression) para fazer referência ao ManagedBean “validadorMB”. O objetivo desse componente é atribuir o valor digitado no campo de texto ao atributo cpf do ManagedBean referenciado.

Na linha seguinte, declaramos um botão que chama o método validar(), explicado anteriormente. Assim que o componente commandButton for clicado, ele fará uma chamada ao método do nosso ManagedBean. O importante aqui é notar que podemos fazer referência a qualquer atributo ou método que seja visível de fora do ManagedBean, apenas usando a EL Expression dentro da página XHTML.

Por último, temos o componente message com um atributo for, que especifica qual o ID das mensagens que devem ser capturadas e mostradas nesse componente. Como utilizamos o ID msgValidador na Listagem 1, todas as mensagens com esse ID serão mostradas no componente message da Listagem 2.

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados