Backing beans em JSF

Este é o 3º artigo da série. Assume portanto que já tem um projeto de exemplo JSF a funcionar. É altura de fazer algumas experiências, nomeadamente criar um “backing bean”.

Artigo originalmente publicado na Revista PROGRAMAR, edição n.º 45, Maio 2014.

Um backing bean é uma classe Java que responde a pedidos e gere o estado dos componentes JSF. É uma espécie de “servlet de alto nível”. Entre várias outras funções, faz a ligação à camada dos serviços que pode ser uma BD, um servidor remoto ou outro. Uma aplicação pode conter múltiplos backing beans.

Os backing beans mais conhecidos em Java são os “managed beans” e os “named beans” (ou CDI beans). Os primeiros são mais comuns; os segundos mais flexíveis. Os conceitos são muito semelhantes. Usaremos os primeiros devido à facilidade de utilização e porque o Tomcat apenas suporta esses. Contudo, serão deprecated a médio prazo. Se quiser usar os CDI, deverá usar o TomEE (Tomcat versão Java EE).

Um managed bean representa o Controller no padrão MVC. Caracteriza-se consoante o seu âmbito (scope). Os mais importantes são:

  • Application: o bean persiste na aplicação estando disponível para todas as sessões;
  • Session: o bean existe por utilizador; é útil para dados referentes ao que utilizador está a fazer durante um período de utilização;
  • View: semelhante ao session, mas por tab; é como que se cada tab do browser representasse uma sessão diferente;
  • Request: a única gestão de estado que existe dura apenas o pedido e por isso é o mais leve.

Para exemplificar como funciona um managed bean… criemos um. Para efeitos de aprendizagem, comecemos com um bean de sessão, o que apresenta menos desafios. Para tal, após ter o projeto JSF (criado no artigo anterior) aberto:

  1. Clique com o botão direito do rato em Source Packages e faça New > Java Class…:
  2. Dê-lhe o nome de ClientesBean e coloque-o no package pt.revista.programar.
  3. bean criado estará automaticamente disponível para ser usado nos XHTML sob a forma de ClientesBean (técnica conhecida como convention over configuration). Para tal, anote a classe com as anotações @ManagedBean e @SessionScoped (disponíveis em javax.faces.bean).
  4. Crie uma propriedade com getter/setter chamada nome. Ficará com o seguinte código:
    package pt.revista.programar;
    import java.io.Serializable;
    import javax.faces.bean.ManagedBean;
    import javax.faces.bean.SessionScoped;
    
    @ManagedBean
    @SessionScoped
    public class ClientesBean implements Serializable {
       String nome;
       public String getNome() {
          return nome;
       }
       public void setNome(String nome) {
          this.nome = nome;
       }
    }
  5. Na pasta Web Pages, vá a index.xhtml e dentro de h:body coloque o seguinte código:
    <h:form>
       <h:inputText value='#{clientesBean.nome}' />
       <h:commandButton action='resultado' value='Enviar' />
    </h:form>

    Tal código irá comunicar com o managed bean criado anteriormente. O botão irá submeter o formulário.

  6. Agora precisamos da página para onde seremos redirecionados. Teremos de chamá-la de resultado.xhtml para que a action no botão anterior seja respeitada. Para criar está página carregue com o botão direito sobre Web Pages > New > Other > Web > XHTML > Next; dê-lhe o nome resultado e faça Finish.
  7. Apague todo o conteúdo e copie o conteúdo de index.html
  8. Vamos apenas substituir o conteúdo de h:body de maneira a ficar:
    <h:body>
        <h:outputText value="Boa tarde #{clientesBean.nome}" />
    </h:body>
    
  9. Agora está tudo em ordem. Já temos uma página que recebe o seu nome, um bean que o guarda e uma página que o exibe. Para ver tudo em ação, clique com o botão direito no projeto e faça Run.

JSF é um mundo construído em cima das tecnologias que já conhece (HTTPservletsJavaScript, etc.), pelo que por vezes é estranho que seja tão alto nível. Após alguns anos a usá-lo posso garantir que depois do período inicial de aprendizagem, compensa: a velocidade de desenvolvimento aumenta consideravelmente e damos por nós a fazer coisas muito complexas em muito pouco tempo.

Há que assinalar também que, ao usar JSF, devemos tentar sempre conhecer e fazer uso das suas funcionalidades. Isto porque é provável que ele resolva o nosso problema e não seja preciso escrever código específico. Seja chamadas AJAX, personalização do componente, utilização da query string, entre outros, o JSF já pensou nisso. Se precisamos de um componente mais avançado, existem as bibliotecas de componentes (ICEfacesRichFacesPrimeFaces), que trazem componentes muito ricos, flexíveis e funcionais. É improvável que tenhamos de recorrer a código JavaScript para operações comuns; a ideia de usar uma framework server-side é mesmo essa: ser tudo personalizável por via dos atributos XHTML dos componentes.

No próximo artigo veremos como instalar a biblioteca de componentes PrimeFaces.

6 thoughts on “Backing beans em JSF

  1. Poderei ter a necessidade de desenvolver uma aplicação web e a minha escolha seria Java com JSF. Muitas vezes a dificuldade no arranque destes projetos tem a ver com o setup das ferramentas (configurações, etc), por isso estes artigos são realmente úteis para mim.
    Seria interessante a continuação com a integração e utilização do PrimeFaces (como refere no site da Programar que poderia ser a continuação dos artigos).
    Em seguida, o que eu gostaria e seria mais útil para mim (embora já não seja específico de JSF), seria um artigo sobre como incluir na nossa aplicação autenticação (server, DB, etc) e também autorização (i.e., acesso a páginas/funcionalidades consoante o utilizador autenticado). Não havendo a possibilidade do artigo, talvez possa dar a indicação de uma boa referência sobre o assunto (livros, links, etc).

    Obrigado

Deixar uma resposta