Obrigado por visitar a devmedia.com.br!

Precisamos de você para divulgar nossos vídeos e cursos gratuitos para a comunidade.

Se você gosta da devmedia.com.br por favor dê-nos o seu clique para o Google+ e ajude outros desenvolvedores ao redor do mundo.



Obrigado por seu apoio!
Equipe DevMedia

sair sem compartilhar (x)
DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:

Bookmarking com Restfaces

Habilitando o suporte à bookmarking no JSF.

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.





    2 COMENTÁRIOS

[Fechar]

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



Ivan Luís Lopes Gonçalves
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



em 10/8/2010 10:45 - Responder

 

  Dyego Souza Do Carmo
Opa !

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

Espero ter ajudado !



em 11/8/2010 17:13 - Responder
 



[Este post ainda não foi associado a uma sequência]
Autor
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.


Space do autor
Estatísticas
Favorito:
Comentários:
Feedback:
Utilidade:
0   0
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[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
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Direitos Reservados a web-03