JSF Mini Livro – Dicas, conceitos e boas práticas

85

Posted on September 2, 2012 by

Share it now!

Flash Scope

Em nossa aplicação, por diversas situações, precisamos programaticamente redirecionar o usuário através do método HttpServletResponse.sendRedirect. Ao utilizar o método sendRedirect uma nova requisição é feita e os dados do request original serão perdidos. A imagem abaixo ilustra melhor essa situação:

Não é boa prática utilizar a sessão usuário (HttpSession) para armazenar objetos/informações, atributos ou valores que seriam perdidos na hora do redirect. Lembre-se que para casa usuário que utiliza o HttpSession é mais memória do servidor que será utilizada.

O JSF 2.0 vem com um componente muito útil chamado Flash Scope. Esse componente irá manter o objeto até o fim do redirect. Ele funciona como se fosse um Map<String, Objetct> que irá manter o objeto temporariamente na sessão, e que após o objeto ser utilizado sua referência é eliminada. O código abaixo mostra como colocar um objeto dentro do Flash:

// import da classe
importcom.sun.faces.context.flash.ELFlash;

// utilizar antes do redirect
ELFlash.getFlash().put("carro", objeto);

E para utilizar o valor na página após o redirect basta utilizar através de EL: “#{flash.carro.peso}”. Automaticamente a referência ao objeto carro do código acima será removida da memória após ser utilizado na exibição da página.

Outro recurso interessante é manter o objeto por mais tempo na memória do servidor; para utilizar esse recurso basta acessar o objeto do seguinte modo: “#{flash.keep.carro.peso}”. Basta adicionar a palavra “keep” toda vez que a aplicação for acessar o objeto dentro do Flash, pois desse modo a referência desse objeto não será removida (para maiores informações, clique aqui).

Response to JSF Mini Livro – Dicas, conceitos e boas práticas

1 3 4 5
  1. Bruno

    Hebert gostaria de parabenizá-lo pelo excelente trabalho que vc tem feito no Brasil, compartilhar o conhecimento e ajudar as pessoas é algo muito raro em um mundo tão egoísta como temos observado. Parabéns pela didática e o detalhamento passo a passo no seu material que ajuda todos os níves de estudantes. Qeu Deus abençoe muito a sua vida em todos os sentidos. Um abraço e parabéns pela iniciativa, tem me ajudado demais tb no trabalho.

    • uaihebert Post author

      Bruno, boa noite.

      Fico feliz que estou conseguindo ajudar.

      Valeu mesmo pelo apoio e pela força.

      Deus abençoe aí.

      Obrigado pela visita, e desculpe a demora em responder. Estive

  2. Cleiton Cardoso

    Parabéns pelo artigo Hebert.

    Eu estou com uma dúvida aqui, pelo que andei testando, no ViewScoped o MB não é eliminado da memória quando você fecha a página, só quando você faz um redirect dessa página. Isso é um comportamento que não tem como ser controlado?

    • uaihebert Post author

      Cleiton, boa tarde.

      Um jeito de controlar seria reduzindo o tamanho do tempo de sessão (3min por exemplo), e após fazer isso, você colocaria uma chamada Ajax de curtos períodos (2 em 2 min por exemplo) apenas para manter a sessão ativa.

      Espero ter ajudado, Obrigado pela visita.

  3. Fernando Sciuba

    Hebert , tenho uma dúvida, para um caso de um método synchronized que efetua a persistência no banco neste caso a melhor forma de garantir que somente uma requisição será executada por vez é utilizando o @ApplicationScoped na classe onde o método se encontra? ou não há a necessidade disso!?

    Obrigado e parabéns pelo site.

  4. Marcelo

    Ainda não li tudo, mas pelo que eu já vi estou achando excelente.
    Você poderia fazer também um mini livro de JPA.

    • uaihebert Post author

      Marcelo, boa noite.

      Já existe aqui no blog um mini livro de JPA. Existe também um chamado Consultas e Dicas só com diversas funções de Pesquisa no JPA.

      Até mais.

1 3 4 5

Leave a Reply

Your email address will not be published. Required fields are marked *


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Current day month ye@r *