2011-03-24 24 views
20

Corrígeme si me equivoco, pero estoy pensando que todas mis presentaciones que no sean AJAX deben usar el método Publicar/Redirigir/Recibir (PRG), ya que GET debe usarse para actualizar/consultar datos, y en En mi caso, las páginas de la aplicación en las que puedo pensar realmente solo actualizan los datos y luego actualizan la página, por lo que creo que PRG se ajusta aquí.JSF 2 y Publicar/Redirigir/Obtener?

Creo que puedo hacer esto utilizando las caras-config.way, donde hago uso de la <redirect/>, o puedo usar el return "myview.xhtml?faces-redirect=true";

Ahora la pregunta es ..

¿Hay alguna forma puedo configurar esta a nivel mundial como el de no llamadas AJAX/sostiene, utilizan automáticamente caras-redirección = true, por lo que mi fuente es tan simple como esto:

return "myview"; 
+0

@romaintaz: Gracias, se olvidó de citar la etiqueta de redireccionamiento, jaja – bertie

Respuesta

24

usted puede hacer esto con una costumbre ConfigurableNavigationHandler. He aquí un ejemplo patada de salida:

package com.example; 

import java.util.Map; 
import java.util.Set; 

import javax.faces.application.ConfigurableNavigationHandler; 
import javax.faces.application.NavigationCase; 
import javax.faces.application.NavigationHandler; 
import javax.faces.context.FacesContext; 

public class RedirectNavigationHandler extends ConfigurableNavigationHandler { 

    private NavigationHandler parent; 

    public RedirectNavigationHandler(NavigationHandler parent) { 
     this.parent = parent; 
    } 

    @Override 
    public void handleNavigation(FacesContext context, String from, String outcome) { 
     if (!outcome.endsWith("?faces-redirect=true")) { 
      outcome += "?faces-redirect=true"; 
     } 

     parent.handleNavigation(context, from, outcome);   
    } 

    @Override 
    public NavigationCase getNavigationCase(FacesContext context, String fromAction, String outcome) { 
     if (parent instanceof ConfigurableNavigationHandler) { 
      return ((ConfigurableNavigationHandler) parent).getNavigationCase(context, fromAction, outcome); 
     } else { 
      return null; 
     } 
    } 

    @Override 
    public Map<String, Set<NavigationCase>> getNavigationCases() { 
     if (parent instanceof ConfigurableNavigationHandler) { 
      return ((ConfigurableNavigationHandler) parent).getNavigationCases(); 
     } else { 
      return null; 
     } 
    } 

} 

verlo como sigue en faces-config.xml:

<application> 
    <navigation-handler>com.example.RedirectNavigationHandler</navigation-handler> 
</application> 
+1

Wow, elegante! Gracias ! – bertie

+0

De nada. – BalusC

+0

Es posible hacer que este controlador funcione cuando el método de acción devuelve vacío (permanezca en la misma página) ''? – marioosh

Cuestiones relacionadas