Como redirecionar para indexar a página se o tempo de sessão aconteceu no aplicativo JSF
-
23-09-2019 - |
Pergunta
Estou usando o JSF RI 1.1. Como redirecionar para indexar a página se o tempo de sessão acontecer?
Solução
Existem duas maneiras que podem ser combinadas:
Fazer uso do
<meta>
Atualizar cabeçalho no HTML<head>
elemento em combinação comHttpSession#getMaxInactiveInterval()
que retorna o remanescente de segundos que a sessão ainda não vive.<meta http-equiv="refresh" content="${pageContext.session.maxInactiveInterval};url=index.jsf">
Esta abordagem redirecionará automaticamente a página para a dada
url
Quando a sessão expira.Truque
ViewExpiredException
dentroweb.xml
:<error-page> <exception-type>javax.faces.application.ViewExpiredException</exception-type> <location>/index.jsf</location> </error-page>
Esta abordagem encaminhará automaticamente a solicitação para o dado
<location>
quando umPOST
O pedido foi demitido (h:commandButton
,h:commandLink
, etc) enquanto a sessão expirou.
Observe que eu pessoalmente preferiria uma página de aviso intermediária de "Sessão expirou" ou alerta para evitar "WTF?" experiências e, assim, melhore a experiência do usuário. Ainda mais, eu também preferiria disparar uma enquete Ajaxical a cada minuto quando o cliente demonstrou atividade ouvindo click
e keypress
, para que a vida da sessão possa ser mais adiada.
Outras dicas
Você pode usar um Filter
pegar a exceção específica indicando o tempo limite e redirecionar a partir daí.
JSF2:
<meta http-equiv="refresh" content="#{facesContext.externalContext.sessionMaxInactiveInterval};url=#{request.contextPath}/index.xhtml"/>