Modelo de artigo a ser utilizado st1\:*{behavior:url(#ieooui) }

Bookmarking com Restfaces

Habilitando o suporte à bookmarking no JSF

 

Baseado em várias questões, dentre elas a segurança, o JavaServer Faces utiliza, por padrão, o método POST, ao fazer requisições ao servidor. Uma característica do método POST é incluir os dados a serem processados, junto ao corpo da requisição. Isso trouxe algumas limitações ao JSF, uma delas é a falta de suporte ao bookmarking. Com a popularização de serviços de social bookmarking, como o del.icio.us, digg, technorati e o nacional blogblogs, isso seria uma desvantagem para web sites desenvolvidos em JSF. Mas hoje já dispomos de alguns frameworks que estendem essa funcionalidade, tais como JBoss Seam, RI Sandbox e Restfaces. A proposta desses frameworks, quanto ao bookmarking, é basicamente fazer com que as requisições utilizem o método GET.

 

Dentre os frameworks para extensão do bookmarking, o Restfaces tem se apresentado uma solução simples e robusta. Ele permite-nos alterar propriedades nos beans e passar parâmetros para os métodos através da URL, converter parâmetros, além de outras coisas que veremos.

 

A partir da versão 1.3, ficou ainda mais fácil usar as annotations do Restfaces. Outras características são:

  • Redirecionamento usando o prefixo rest:. Se um bean retornar por exemplo: returnrest:imprimirBoletoou returnrest:/boleto.jsp”, o Restfaces irá redirecionar, respectivamente, para uma ação chamada imprimirBoleto ou para a página ”boleto.jsp.
  • Remoção do mapeamento do Faces Servlet da URL, ou seja, até a versão 1.2 o bookmarking era feito com a extensão configurada, já com a versão 1.3 ao invés de /id/726.jsf, temos /id/726.
  • Suporte a dois estilos de passagem de parâmetros: query parameter (ex.: ?local=centro) e path parameter (ex.: /local/centro).

 

Instalação

A última versão do Restfaces pode ser baixada aqui. O arquivo jar deve ser colocado no classpath da sua aplicação (WEB-INF\lib) e as seguintes alterações devem ser feitas no faces-config.xml:

 

<faces-config>

<application>

            <view-handler>

                  org.restfaces.application.RestViewHandler

            </view-handler>

            <navigation-handler>

                  org.restfaces.application.RestNavigationHandler

            </navigation-handler>

            ...

</application>

...

</faces-config>

Listagem 01. Configuração do faces-config.xml.

 

Pronto! O Restfaces já foi instalado. Agora para usá-lo nas suas páginas basta acrescentar a taglib de acordo com a Listagem 02, ou se estiver usando Facelets acrescentar o namespace de acordo com a Listagem 03.

 

<%@ taglib uri=”http://restfaces.dev.java.net” prefix=”rest” %>

Listagem 02. Restfaces numa página JSP.

 

xmlns:rest=”http://restfaces.dev.java.net”

Listagem 03. Restfaces com Facelets.

 

Habilitando bookmarking

 

Eu havia falado que o JSF não faz requisições GET, mas isso não é bem verdade. A tag <h:outputLink /> renderiza um link HTTP que usa o método GET, isso é verdade. Só que se quisermos executar uma ação num bean por meio dessa tag, teríamos que implementar um PhaseListener, o que daria mais trabalho. O Restfaces se propõe a evitar esse trabalho. Na Listagem 04 vemos um exemplo de como o trabalhar com esse framework pode ser simples.

 

package br.com.javamagazine;

 

import org.restfaces.annotation.*;

 

public class ClienteBean {

      private Cliente cliente;

     

      @HttpAction(value="pesquisarCliente", pattern="cliente/{id}")

      public String getCliente(@Param("id") long id){

            cliente = new ClienteService().getClientePorId(id);

            return "/cliente.jsp";

      }

}

Listagem 04. Exemplo de Bean com Restfaces.

 

De acordo com o código da Listagem 04, nota-se que apenas duas anotações foram utilizadas. @HttpAction anota o método que será acionado pela página e possui dois parâmetros, value, que é valor único e obrigatório e pattern que é opcional. Vale notar que o pattern termina com {id}, isso serve para que o estilo da URL use o path parameter (/cliente/987) ao invés do query parameter (/cliente?id=987). A outra anotação, @Param, identifica o parâmetro passado pela página. A Listagem 05 mostra como fica na página.

 

<rest:link value="pesquisarCliente">

      <f:param name="id" value="#{cliente.id}" />

      <h:outputText value="#{cliente.nome}">

</rest:link>

Listagem 05. Restfaces numa página.

 

Esta foi uma rápida introdução ao bookmarking no JSF com RestFaces. Bookmarking é uma limitação do JSF que será superada com a versão 2.0. Enquanto o release não chega o RestFaces vem apresentando-se como uma ótima solução. No próximo artigo veremos outras funcionalidades do RestFaces, tais como converter parâmetros, setar propriedades dentre outras coisas. Até a próxima.