Reload aplicacion redirige incorrectamente

Buen dia,

Tengo una aplicación que tiene definida dos vistas: La de login y una principal. En la principal tengo un boton para realizar un log out. Al realizar esa accion utilizo el siguente código:
@Override
public void logout() {
VaadinSession.getCurrent().getSession().invalidate();
Page.getCurrent().reload();
}
El tema es que esta haciendo lo que quiero, pero me recarga la vista principal. Yo quiero que me cargue mi pagina de login.
Que me esta faltando o por que redirecciona corectamente a mi pagina de login?. “Force” con UI.getCurrent().getNavigator().navigateTo(ViewCredencial.NAME); para que desde ahi realice el reload pero no me parece que es la forma correcta.

Saludos

Matías,

una vez que invalidas la sesión la vista, que acaba de ser eliminada, se mantiene en el cliente. Entiendo que deberías redirigir usando el método setLocation de Page a la uri de login. Por ejemplo,

Page.getCurrent().setLocation("/login")

Hola Omar, antes que nada gracias por tu respuesta.

Sabes que el problema que tengo realizando esa operación es que si bien la aplicación se redirige, el problema que se presenta es que me informa que la sesion expiró con lo cual no puedo volver a loguerme.
Lo que quiero es que efectivamente la aplicacion se “recargue” por lo cual con los metodo que comenté lo hace bien, pero mi duda es que si lo dejo directamente asi :
public void logout() {
VaadinSession.getCurrent().getSession().invalidate();
Page.getCurrent().reload();
}
en mi caso recarga esta direccion: http://localhost:8080/front/#!viewAdministrativo
cuando en realidad lo que quiero es que recarge esto: http://localhost:8080/front/

Para lograr mi cometido actualmente estoy haciendo esto:
@Override
public void logout() {
VaadinSession.getCurrent().getSession().invalidate();
UI.getCurrent().getNavigator().navigateTo(ViewCredencial.NAME);
Page.getCurrent().reload();
}
Lo que logro con esto es setear la vista de login y ahi si recarga bien.
Mi consulta es si esta es la manera correcta digamos y si no hay forma de “refrescar” desde cualquier vista que yo dispong

Muchas gracias!!

Matías,

Perdona pero estoy hablando del código sin probar, tan solo de la idea que tengo y eso quizá me lleve a alguna imprecisión.

Creo que una vez finalizada la sesión sólo deberías decidir a dónde el cliente hace un GET para sustituir el contenido que tiene en su navegador, que ya no es valido.

Entiendo que si deseas recargar la app podrías hacer

Page.getCurrent().setLocation("/") Dices que eso no te recarga la vista de login?

En la implementación de tu UI tienes el método init() donde inicializas la app.
Ahí seguramente estás definiendo el navigator, al que añades las vistas accesibles de un usuario para navegar.
Ahí quizá accedes a la request para comprobar si el usuario aporta credenciales adecuadas en esa petición inicial.

Si el cliente no aporta credenciales es dentro del propio init() donde decides navegar a la vista de credenciales. Cómo navegas a la vista de credenciales? Haciendo un getPage().setUriFragment(“!”+ViewCredencial.NAME)
Dado que el navigator implementa un UriFragmentChangedListener, bastaria con preocuparse de modificar el uri fragment que el navigator va a ser invocado.

Si el cliente tiene credenciales dentro del propio init puedes navegar a la vista principal: getPage().setUriFragment(“!”+ViewPrincipal.NAME)

Y finalmente en la vista principal tienes un boton de logout con un listener que llama a tu metodo logout en el que:
1.cierras sesion.
2. fuerzas un get a “/”

Y vuelta a empezar …

Saludos

Matías,

mira este enlace:

https://vaadin.com/wiki/-/wiki/Main/Handling%20logout

Omar. Mil gracias!!!

Page.getCurrent().setLocation(“/”) hizo el truco.
Habia leido la entrada en vaadin del manejo de sesiones, pero era claro que algo me faltaba.

Mil gracias por la ayuda! Saludos y buen finde semana!