icono_twiter
Jose Manuel Sánchez Suárez

Consultor tecnológico de desarrollo de proyectos informáticos.

Puedes encontrarme en Autentia: Ofrecemos servicios de soporte a desarrollo, factoría y formación

Somos expertos en Java/J2EE

Ver todos los tutoriales del autor

Fecha de publicación del tutorial: 2011-04-27

Tutorial visitado 12.798 veces Descargar en PDF
Session TimeOut en JSF2 con el soporte de Primefaces.

Session TimeOut en JSF2 con el soporte de Primefaces.


0. Índice de contenidos.


1. Introducción

Ya hemos visto en adictos como llevar a cabo el control de timeout de la sesión con otras librerías de componentes visuales JSF:

Ahora es el turno de Primefaces, en el entorno de JSF2.

En este tutorial vamos a ver como controlar la perdida de sesión del lado del cliente con el soporte de un componente de Primefaces, para informar de la misma de una manera visualmente atractiva.


2. Entorno.

El tutorial está escrito usando el siguiente entorno:

  • Hardware: Portátil MacBook Pro 17' (2.93 GHz Intel Core 2 Duo, 4GB DDR3 SDRAM).
  • Sistema Operativo: Mac OS X Snow Leopard 10.6.7
  • JSF 2.
  • PrimeFaces 2.2.1
  • Eclipse 3.6: Helios, con m2eclipse.
  • Maven 3.0.3.
  • Apache Tomcat 7.0.6 con la jdk 1.6.

3. Implementanto la solución con Primefaces.

Nuestro objetivo es informar al cliente que se ha perdido la sesión con el servidor y para ello vamos a hacer uso de un componente que básicamente es un monitor de inactividad del cliente.

Cuando el cliente permanezca inactivo un periodo de tiempo predeterminado mostraremos una ventana modal con una redirección a la página de login.

Lo que haremos es hacer coincidir la configuración de este monitor en el cliente con la configuración de la sesión establecida en el descriptor de despliegue de la aplicación web, con ello el tiempo de timeout estará establecido en un único lugar.

Vamos a crear una plantilla, sessionTimeOut.xhtml, que podremos incluir en cualquiera de nuestros layouts con el siguiente código:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html" xmlns:p="http://primefaces.prime.com.tr/ui"
	xmlns:f="http://java.sun.com/jsf/core">
	<ui:composition>
			<p:idleMonitor onactive="sessionTimeOutDialog.show();" timeout="#{session.maxInactiveInterval * 1000}" />
			<p:dialog header="#{msg['error.sessionTimeOut.header']}" widgetVar="sessionTimeOutDialog" 
			 modal="true" fixedCenter="true" closable="false" width="400" visible="false">
			     <h:outputText value="#{msg['error.sessionTimeOut.text']}" />
			     <input id="confirmBackToLogin" type="button" value="#{msg['error.sessionTimeOut.button']}"
			        onclick="window.location='#{facesContext.externalContext.requestContextPath}/login.xhtml';" />
			</p:dialog>
	
	</ui:composition>
</html>

El componente p:idleMonitor está configuración con el session timeout establecido en la aplicación y, al transcurrir dicho tiempo mostrará una ventana modal, con el evento onactive.

El atributo widgetVar de Primefaces sirve para darle un nombre al componente en el ámbito del cliente y poder invocar a funciones javascript de su api, por ejemplo, mostrarlo u ocultarlo.

El resultado, transcurrido el tiempo definido, será similar al siguiente:


4. Referencias.


5. Conclusiones.

Simple, pero necesario.

Este tutorial surge a petición de un alumno de uno de nuestros cursos de JSF2. Como sabéis en Autentia nos dedicamos al desarrollo, consultoría, coaching y formación y, en esta última faceta siempre estamos dispuestos a echar una mano a quien confía en nosotros para la impartición de los cursos sobre las tecnologías con las que trabajamos habitualmente.

Un saludo.

Jose

jmsanchez@autentia.com

A continuación puedes evaluarlo:

Regístrate para evaluarlo

Por favor, vota +1 o compártelo si te pareció interesante

Share |
Anímate y coméntanos lo que pienses sobre este TUTORIAL:

Fecha publicación: 2013-01-24-14:47:24

Autor: tav0

Hola, encuentro excelente la pagina, tengo una duda, es donde debo implementar el código
soy nuevo en primefaces y no conozco mucho del tema :/

Fecha publicación: 2012-03-28-00:11:17

Autor: Juank4000

Estimado, gracias por el tutorial, pero al parecer tiene un problema ya que cuando se mueve el mouse se resetea el contador de p:idleMonitor, esto sería grave ya que en el servidor la sesión podría expirar mientras en el cliente la cuenta regresiva se resetearía cada vez que se mueva el mouse (el servidor no tiene idea si el usuario movió el mouse).
Esto se lo comento porque hice la prueba y efectivamente, la cuenta empezaba cada vez que movía el mouse.
Saludos cordiales.

Fecha publicación: 2011-07-04-08:39:25

Autor: jmsanchez

Buenas,

Muchas gracias por los comentarios.

Iremos atendiendo todas estas peeticiones de tutoriales poco a poco.

Stay tuned!

Un saludo.

Jose.

Fecha publicación: 2011-07-04-01:59:31

Autor: chicaker

Hola que tal estoy trabajando en una aplicación muy parecida a MercadoLibre es un trabajo de la Universidad, me gustaria saber si me podrias ayudar con lo siguiente, como hago un Upload con Primefaces. Estoy trabajando con Eclipse Helios 3.6, con Maven 3.0 como servidor web uso Tomcat 7.0v

Fecha publicación: 2011-04-29-14:53:55

Autor: Booger

Mis felicitaciones por el tutorial, gracias a Uds. me estoy metiendo en el tema de Primefaces. Ya que estamos te quería pedir si pueden hacer un tutorial sobre Spring Security 3 con Dao y Primefaces. Creo que sería un muy buen complemento de este mismo tutorial.Un Abrazo