4.6. Apagar una Aplicación

Un usuario puede cerrar la sesión o cerrar la página web o el navegador, por lo que una sesión y la instancia application asociada pueden terminarse. La finalización de una aplicación puede ser iniciada por la lógica de la aplicación. De lo contrario, será terminada automáticamente cuando la sesión del Servlet expire.

4.6.1 Cerrar una Aplicación

Si el usuario sale de la aplicación a través de la interfaz de usuario, un controlador de eventos debería llamar al método close() en la clase Application para cerrar la sesión.

En el siguiente ejemplo, tenemos un botón Salir, que termina la sesión del usuario.

Button botonCerrar = new Button("Salir");

botonCerrar.addListener(new Button.ClickListener() {
    @Override
    public void buttonClick(ClickEvent event) {
        getMainWindow().getApplication().close();
    } 
});
 
principal.addComponent(botonCerrar);

Notará que el cierre de la aplicación, simplemente recarga la aplicación con una nueva instancia de Application. Puede configurar la ventana para redirigir a una dirección URL diferente (que no recarga la aplicación) con setLogoutURL. En su clase application, escriba:

setLogoutURL("/salir.html");

4.6.2 Controlar el Cierre de una Ventana

El cierre de la ventana principal (o todas las ventanas de nivel de aplicación) no cierra la sesión y la instancia de la aplicación quedará colgando. Necesitará programar tal comportamiento controlando los eventos de cierre de las ventanas.

Si el usuario cierra una ventana del navegador, como la ventana principal o cualquier otra ventana de nivel de aplicación, la ventana enviará una petición final AJAX al servidor, el cual disparará un Window.CloseEvent para la ventana cerrada. Puede controlar el evento con un Window.CloseListener. En caso de que el usuario cierre el navegador, el evento es disparado para cada ventana abierta.

// Cerrar la aplicación si la ventana principal es cerrada.
principal.addListener(new Window.CloseListener(){
   @Override
    public void windowClose(CloseEvent e) {
       System.out.println("Cerrando la aplicación");
       getMainWindow().getApplication().close();
    } 
});

Tenga en cuenta que actualizar una ventana significa cerrarla y volverla a abrir. Por lo tanto, si tiene un controlador de cierre como el anterior, el usuario pierde la posibilidad de actualizar la ventana del navegador.

En el probable caso de que el navegador se bloquee, ningún evento de cierre es comunicado al servidor. Como el servidor no tiene manera de conocer acerca del problema, y la sesión quedará colgando hasta que expire el tiempo de espera de la sesión. Durante este tiempo, el usuario puede reiniciar el navegador, abrir el URL de la aplicación, y la ventana principal le mostrará donde el usuario le dejó. Esto puede ser un comportamiento deseado en muchos casos, pero a veces no lo es y puede crear un problema de seguridad.



Anterior
4.5. Referenciar Recursos
Siguiente
4.7. Controlar Errores

No hay comentarios.:

Publicar un comentario