Hay varias formas de Controlar cuando el usuario esta en una pagina Web desarrollada con Jakarta Server Faces. Presiona el boton Refresh o la tecla F5 para recargar o actualizar la pagina actual.
Y cuando ocurran los eventos el invocara el método broserEvent()., que realizara las validaciones correspondientes y nos dirigirá a la pagina que se almaceno en la sesión en la variable pageInView.
En la clase AccessController validamos la pagina indicada en pageInView y hacemos un llamado a ella.
Creamos un proyecto Jakarta EE
y se ha configurado la pagina de inicio en el archivo web.xml
Al ejecutar la aplicación se muestra la pagina de login.xhtml donde se pedirá las credenciales del usuario.
Si presionamos la tecla F5 o el botón Refresh del navegador
podrá notar que sera redirigido a la pagina de login.xhtml, en lugar de actualizar la pagina index.xhtml.
Para evitar esta situación y mantener al usuario observando la pagina actual se pueden implementar de varias formas:
- Controlar los eventos con JavaScript,
- Guardar datos en el cliente.
- Personalizar mediante <f:viewAction>
En nuestro caso mostraremos como utilizar algo diferente mediante <f:viewAction/>, es un ejemplo demostrativo solamente.
Lo que haremos en colocar en cada formulario .xhtml
<h:head>
<title>Facelet Title</title>
<f:metadata>
<f:viewAction action="#{accessController.browserEvent()}"/>
</f:metadata>
</h:head>
AccessController.java
Boolean loggedIn = false;
public String login() {
loggedIn = Boolean.TRUE;
//Valide las credenciales de los usuarios
JmoordbContext.put("pageInView", "/faces/index.xhtml");
return "/faces/index.xhtml";
}
public String browserEvent() {
String pageInView = "";
try {
pageInView = (String) JmoordbContext.get("pageInView");
pageInView = (pageInView == null ? (loggedIn?"/faces/index.xhtml":"/faces/login.xhtml" ): pageInView);
System.out.println(" pageInView revisado"+ pageInView);
return pageInView;
} catch (Exception e) {
}
return pageInView;
}
Desde cada Controller guardamos la ruta de la pagina xhtml a desplegar en pageInView
JmoordbContext.put("pageInView", "/faces/index.xhtml");
y con solo indicar en cada formulario
Comments