2010-02-05 10 views
8

Qual è il modo migliore per creare collegamenti "Indietro", in modo che l'applicazione rimanga coerente dopo la navigazione.Best practice per i collegamenti di navigazione "Indietro" in JSF

  • onclick="history.go(-1)". È molto dannoso?
  • Utilizzo di una pila in un bean di supporto che consente di visualizzare il caso di navigazione dell'ultima vista. È possibile farlo impostando la custodia di navigazione con <f:setPropertyActionListener>.
  • Nessuna di queste ... altre soluzioni.

Qualsiasi aiuto sarebbe apprezzato! Condividi i tuoi pensieri! Daniel

risposta

5

sto usando:

  • MyFaces orchestra per la fornitura di portata conversazione
  • <redirect /> per ogni regola di navigazione

Questo assicura che premendo il pulsante "indietro" o history.go(-1):

  • i dati che sono stati disponibili nella schermata precedente saranno ancora lì (perché la conversazione è ancora attiva)
  • la finestra di dialogo del browser "reinvia" non si aprirà.

P.S. "backlink" ha un significato diverso

6

Se si desidera risolvere questo problema con i collegamenti di navigazione programmati, è possibile utilizzare uno stack LinkedList. In questo modo puoi impostare i limiti per il numero di casi di navigazione memorizzati.

Esempio:

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(); 
    } 
} 

Così nel link 'Avanti':

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

e un link 'back' sarebbe:

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

Hi. Qual è lo scopo di questo fagiolo? Perché se è SessionScoped allora sarà veramente difficile gestire la navigazione a causa dello stack con link che finiranno in falsa navigazione. – LupoZ