Expirar página (JSF/Icefaces) ao clicar no voltar

4 respostas
AleYoshimatsu

Olá !!

Temos um requisito não-funcional numa aplicação que diz que o usuário não pode utilizar o voltar do browser, mais especificamente IE. A nossa idéia aqui era de expirar a página caso o usuário tente voltar pelo browser.
A aplicação utiliza jsf e icefaces na camada de apresentação.
Já fiz uma pesquisa no google e encontrei algumas tentativas para expirar a página, mas nenhuma funcionou… Não sei se não funcionou porque utilizamos os frameworks da camada de apresentação ou por outro motivo…

Algumas tentativas que já realizei:

package sandbox;

import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
import javax.servlet.http.HttpServletResponse; 

public class CacheControlPhaseListener implements PhaseListener {

public PhaseId getPhaseId() {
return PhaseId.RENDER_RESPONSE;
}

public void afterPhase(PhaseEvent event) {}

public void beforePhase(PhaseEvent event) {
FacesContext facesContext = event.getFacesContext();
HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
response.addHeader("Pragma", "no-cache");
response.addHeader("Cache-Control", "no-cache");
response.addHeader("Cache-Control", "must-revalidate");
response.addHeader("Expires", "Mon, 8 Aug 2006 10:00:00 GMT"); // some date in the past
}

}

ou setar diretamente nas páginas as tags meta…

Mas nada funcionou… poderiam me ajudar com essa questão!?

Desde já agradeço!

4 Respostas

AleYoshimatsu

Fuçando mais no google, encontrei uma pessoa falando que utilizar o código abaixo só funciona com o request do tipo GET e não com POST… Algúem sabe dizer o pq?
Se isso for verdade, não será possível expirar a página com jsf e icefaces, já que eles sempre utilizam o método POST.

<% response.setHeader("Pragma","no-cache");%> 
<% response.setHeader("Cache-Control","no-store");%> 
<% response.setDateHeader("Expires",-1);%>
rogeriuslima

Cara, tenta dar uma olhada no Spring webflow.
Eu não conheço muito dele, mais pelo que eu ví acho que ele atende este requisito e se integra bem com jsf.
Tem uma edição da java magazine que fala justamente sobre isso (edição 54)

jgbt

Ja precisei fazer algo parecido uma vez. O usuario nao poderia utilizar o back do browser.
A solução utilizada foi colocar em todas as paginas um history.go(+1) em todas as paginas.
Quando a pagina é carregada a primeira vez nao existe history +1, entao nada acontece. Se o usuario clica no voltar o browser volta p/ a pagina anterior, encontra o um history.go(+1) e navega novamente para a pagina que estava. Isso impeda ele de voltar para a pagina anterior.
Ja postei isso aqui um tempao atras. Da uma procurada que vc deve achar.

[]´s

Nadja

Vi um “cara” fazendo assim:

//clears browser history and redirects url

Criado 17 de abril de 2009
Ultima resposta 4 de jun. de 2009
Respostas 4
Participantes 4