Whats new? | Login | Parceiros
Cadastre-se | Atendimento | RSS
+ Java:
artigos   |   vídeos   |    cursos   |    mais

Bookmarking com Restfaces

Habilitando o suporte à bookmarking no JSF.

Daniel de Oliveira Ferreira
Daniel de Oliveira Ferreira (dngferreira@gmail.com) atualmente é desenvolvedor na Ivia, onde trabalha com desenvolvimento JEE, e aluno do curso de Ciência da Computação na Unifor.


Ver space do autor


Estatísticas:
Visualizações:
2621
Favoritado:
 2 vez(es)

Serviços:



Modelo de artigo a ser utilizado

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.





Participe! Inclua um comentário
[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.


IVAN LUÍS LOPES GONÇALVES
10/8/2010 10:45
Dúvida no RestFaces Bom dia, parabéns pelo artigo muito interessante. Estou precisando justamente integrar este tipo de serviço em uma aplicação e estou tendo dificuldades:

- Importei o jar do rest faces do 1.3 em lib

- Adcionei a tag do rest:

[code]
<%@ taglib uri="http://restfaces.dev.java.net" prefix="rest" %>
[/code]

Adcionei o parametro:
[code]
<rest:link value="pessoaAction">
 <f:param name="idFavorecido" value="#{pessoaBean.idFavorecido}"/>
</rest:link>
[/code]

No Faces config adicionei também:
[code]
<application>
      <view-handler>org.restfaces.application.RestViewHandler</view-handler>
      <navigation-handler>org.restfaces.application.RestNavigationHandler</navigation-handler>
</application>
[/code]

Meu método:
[code]

@HttpAction(value="pessoaAction", pattern="buscaCodigoParametro")
  public void getBuscaCodigoParametro(@Param("idFavorecido") int idFavorecido) {
PessoaDAO pessoaDAO = new PessoaDAO();
setPessoa(idFavorecido);

   }
[/code]

Porém não está funcionando. Estranho é que não apresentou erro algum e realmente preciso de alguma orientação.

Minha URL é: http://localhost:8080/minhaaplicacao/pesquisa.faces?idFavorecido=2

Só retorna minha página em branco.

Agradeço dese já a atenção.
Diego



[responder]

 

Dyego Souza do Carmo
11/8/2010 17:13
RE:   Opa !

Em meu devspace tenho uma video aula sobre o RestFaces :) e tambem da abordagem do JSF 2.0 para bookmarking !

Espero ter ajudado !



[responder]
 



 
 

[Este post ainda não foi associado a uma sequência]


[Fechar]
Este post está disponível somente para quem possui Créditos DevMedia. (Ele não está associado a nenhuma publicação DevMedia).


  Conheça os planos de créditos DevMedia e visualize esse post agora mesmo!

Plano conveniência – Neste plano este post custa R$ 0,00 (Compre agora)
Esse plano permite que você compre somente um post, pagando por ele seu preço sem desconto.

Plano ocasional: Aqui este post custa: R$ -1,00 (assinante) ou R$ -1,00 (não-assinante)
Este plano é ideal para quem tem interesse em mais de um post. Você compra um mínimo de R$ 50,00 em créditos e ganha, em média, 50% de desconto no preço do post. Compre Créditos agora!

Assinatura de Créditos (Plano econômico) – Aqui este post custa R$ -1,00
Este plano é ideal para quem tem interesse em muitos posts. Com esse plano você compra R$ 180,00 em créditos e ganha, em média, 80% de desconto no preço do post. Assine este plano agora!

> Saiba mais sobre o Sistema de Créditos DevMedia
DevMedia Group   www.devmedia.com.br   |   www.javafree.org   |   www.mrbool.com
2010 - Todos os Direitos Reservados a DevMedia Group - (21) 3382-5038