viernes, 2 de mayo de 2014

JSF - Reglas de Navegacion

JSF - Reglas de Navegación
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";
 }

 List items = 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