2010-02-05 10 views
8

¿Cuál es la mejor manera de hacer enlaces "Atrás", para que la aplicación se mantenga constante después de la navegación.Mejores prácticas para enlaces de navegación "Atrás" en JSF

  • onclick="history.go(-1)". ¿Esto es muy dañino?
  • Usando una pila en un bean de respaldo que te muestra el caso de navegación de la última vista. Puede hacer esto configurando el caso de navegación con <f:setPropertyActionListener>.
  • Ninguna de estas ... otras soluciones.

¡Cualquier ayuda sería apreciada! ¡Comparte tus pensamientos! Daniel

Respuesta

5

que estoy usando:

  • MyFaces orchestra para proporcionar ámbito de conversación
  • <redirect /> para cada regla de navegación

Esto asegura que al pulsar el botón "atrás" o history.go(-1):

  • los datos que han estado disponibles en la pantalla anterior seguirán allí (porque la conversación aún está activa)
  • el cuadro de diálogo del navegador "reenviar" no se abrirá.

P.S. "backlink" tiene un significado diferente

6

Si desea resolver esto mediante enlaces de navegación programados, puede usar un LinkedList como una pila. De esta forma, puede establecer límites para la cantidad de casos de navegación almacenados.

Ejemplo:

public class BackNavigationBean { 

    public BackNavigationBean() { 
     history = new LinkedList<String>(); 
    } 
    private LinkedList<String> history; 

    public LinkedList getHistory() { 
     return history; 
    } 

    public void setLastPage(String navigationCase) { 
     history.push(navigationCase); 
     if (history.size() > 10) { 
      history.pollLast(); 
     } 
    } 

    public String getLastPage() { 
     return history.pop(); 
    } 
} 

Así que en los enlaces 'hacia delante':

<h:commandLink value="Forward" action="#{myBean.someMethod}"> 
    <f:setPropertyActionListener target="#{backNavigationBean.lastPage}" 
           value="back_to_index" /> 
</h:commandLink> 

y un enlace atrás 'sería:

<h:commandLink value="Back" 
       action="#{backNavigationBean.getLastPage}" /> 
+0

Hola. ¿Cuál es el alcance de este Bean? Porque si es SessionScoped, será realmente difícil administrar la navegación debido a que la pila se insertará con enlaces que terminarán en navegación falsa. – LupoZ

Cuestiones relacionadas