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.
Saiba mais: Como adicionar o JSF em seus projetos
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.
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;
}
}
- Linha 10: Dizemos ao JSF, com essa anotação, que essa classe será um ManagedBean e deve ser injetada em seu contexto com o nome "validadorMB", pois usaremos esse nome para referenciá-la no XHTML;
- Linha 11: Informamos que vamos utilizar o escopo de requisição. Assim, o estado do managedbean será guardado apenas durante a requisição corrente e perdido assim que a mesma for finalizada. Com isso, economizamos recursos do servidor;
- Linha 21: Começamos a implementar a validação do CPF. Note que nossa validação é bem simples e optamos por não utilizar um algoritmo para validar o dígito verificador do CPF, pois esse não é o foco desse artigo. Note, também, que a cada cláusula condicional temos a criação de um objeto FacesMessage, que é adicionado a uma lista de mensagens do FacesContext. Esse último é responsável por trafegar todas as mensagens durante o ciclo de vida do JSF, até que elas sejam renderizadas no navegador do usuário;
- Linhas 23, 25 e 27: O método addMessage() recebe dois argumentos. O primeiro representa o ID do componente JSF que exibirá as mensagens no navegador do usuário, e o segundo é a mensagem propriamente dita, que está encapsulada dentro do objeto FacesMessage.
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.
<!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.
Relacionado: JSF: JavaServer Faces
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Vídeo