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