Las reglas de navegación consiste en el componente de JSF para moverse de una página a otra en el sitio o Aplicación WEB.
Se pueden escribir de diferentes maneras, en al View o Facelets; colocando el nombre de la vista o un nombre del resultado que puede dirigir a otra página, también se puede colocar como resultado de una llamada a un método acción, o especificar en un XML faces-config.xml las reglas de navegación.
a
En el archivo faces-config se pueden definir, si la regla afecta a una vista determinada o a todas las vistas; se puede determinar a cuáles métodos de acción afectan, con qué tipo de resultado y puede tener una condición para tomar esa navegación.
Redirigiendo la VISTA
La navegabilidad puede tener 2 caminos:
1) Forward
Consiste en pasar la vista en el servidor, se mantiene el Objeto de Request.
2) Redirect
Consiste en enviar al Browser una instrucción para redirigir la vista.
Utilizando el Faces-Config.xml
Controlador o ManagedBean
package com.roshka.tutorial.jsf; import java.util.ArrayList; import java.util.List; import javax.faces.bean.ManagedBean; import javax.faces.bean.RequestScoped; @ManagedBean(name = "pageController1") @RequestScoped public class PageController1 { private static org.apache.log4j.Logger logger = org.apache.log4j.Logger .getLogger(PageController1.class); private String name; public String save() { logger.info("PageController1.save: "); if (name.isEmpty()) { return "warning"; } name = "saved"; return "success"; } public String remove() { logger.info("PageController1.remove: "); if (name.isEmpty()) { return "warning"; } name = "removed"; return "success"; } Listitems = new ArrayList (); public List getItems() { return items; } public void setItems(List items) { this.items = items; } public String add() { if (!name.isEmpty()) { items.add(name); } return "success"; } public String cancel() { logger.info("PageController1.cancel: "); if (name.isEmpty()) { return "cancelled?faces-redirect=true"; } name = "cancelled"; return "/cancelled.xhtml?faces-redirect=true"; } public String page2() { return "/page2.xhtml"; } public String redirectPage2() { return "/page2.xhtml?faces-redirect=true"; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
Para Cualquier Vista
<navigation-rule> <navigation-case> <from-action>#{pageController1.add}</from-action> <to-view-id>/more-items.xhtml</to-view-id> </navigation-case> </navigation-rule>
Desde una determinada Vista
<navigation-rule> <from-view-id>/page1.xhtml</from-view-id> <navigation-case> <from-action>#{pageController1.save}</from-action> <to-view-id>/page1.xhtml</to-view-id> </navigation-case> </navigation-rule>
Con una condición
<navigation-case> <from-action>#{pageController1.add}</from-action> <if>#{empty pageController1.items}</if> <to-view-id>/first-item.xhtml</to-view-id> </navigation-case>
Redirigiendo
<navigation-rule> <from-view-id>/page1.xhtml</from-view-id> <navigation-case> <from-action>#{pageController1.remove}</from-action> <from-outcome>success</from-outcome> <to-view-id>/page2.xhtml</to-view-id> <redirect></redirect> </navigation-case> </navigation-rule>
Agregar parámetro URL de Redirección
<navigation-rule> <from-view-id>/page1.xhtml</from-view-id> <navigation-case> <from-action>#{pageController1.save}</from-action> <to-view-id>/page1.xhtml</to-view-id> </navigation-case> <navigation-case> <from-action>#{pageController1.save}</from-action> <from-outcome>success</from-outcome> <to-view-id>/page2.xhtml</to-view-id> <redirect> <view-param> <name>opt</name> <value>save</value> </view-param> <view-param> <name>name</name> <value>#{pageController1.name}</value> </view-param> </redirect> </navigation-case> </navigation-rule>
Desde la Vista
Con un resultado y definición
<navigation-rule> <navigation-case> <from-outcome>cancelled</from-outcome> <to-view-id>/cancelled-page.xhtml</to-view-id> </navigation-case> </navigation-rule>
<h:commandLink value="Cancelar desde View" action="cancelled" styleClass="btn btn-sm btn-primary"> </h:commandLink>
Directamente a la vista
<h:commandLink value="page1" action="/page1.xhtml" styleClass="btn btn-sm btn-primary"> </h:commandLink>
Redirigiendo
<h:commandButton value="Página 1" action="/page1.xhtml?faces-redirect=true" styleClass="btn btn-sm btn-primary"> </h:commandButton>
Desde el Managed Bean
Con un resultado
public String save() { logger.info("PageController1.save: "); if (name.isEmpty()) { return "warning"; } name = "saved"; return "success"; }
Directamente a la vista
public String page2() { return "/page2.xhtml"; }
Redirigiendo
public String redirectPage2() { return "/page2.xhtml?faces-redirect=true"; }
Descargar Ejemplos
No hay comentarios:
Publicar un comentario