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: return ”rest:imprimirBoleto” ou return ”rest:/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.