\subsection{Gestionando el historial de páginas}

\begin{itemize}
	\item En las aplicaciones AJAX, cuando cambia la interfaz, no cambia la URL que se está visitando en el navegador. Esto produce una incompatibilidad con la forma de gestionar el historial de páginas visitadas dentro de los navegadores.
	\item Google Web Toolkit proporciona una clase para gestionar el historial en nuestra aplicación AJAX y que el usuario puede seguir utilizando los botones \emph{Go back} y \emph{Go fordward} de su navegador sin problemas.
	\item Un ejemplo de esto es la aplicación de ejemplo \emph{Kitchen Sink}.
	\item{Ejemplo de utilización}
	\begin{lstlisting}[language=Java]
import com.google.gwt.user.client.History

public class HistoryExample implements EntryPoint, HistoryListener {

private Label lbl = new Label();

  public void onModuleLoad() {
    // En este caso creamos tres enlaces de ejemplo 
    // que permiten navegar al usuario.
    Hyperlink link0 = new Hyperlink("link to foo", "foo");
    Hyperlink link1 = new Hyperlink("link to bar", "bar");
    Hyperlink link2 = new Hyperlink("link to baz", "baz");

    //Selecionamos el primer punto del historial.
    String initToken = History.getToken();
    if (initToken.length() == 0)
      initToken = "baz";

    // Hay que llamar explicitamente la primera vez 
    // para actualizar el historial al estado inicial.
    onHistoryChanged(initToken);

    // Widgets de ejemplo con los links.
    VerticalPanel panel = new VerticalPanel();
    panel.add(lbl);
    panel.add(link0);
    panel.add(link1);
    panel.add(link2);
    RootPanel.get().add(panel);

    // Add history listener
    History.addHistoryListener(this);
  }

  public void onHistoryChanged(String historyToken) {
    // Se llama cada vez que cambia el elemento actual seleccionado 
    // en el historial del navegador, por ejemplo el usuario si el
    // selecciona una pagina visitada anteriormente desde el 
    // navegador.
    // Debemos hacer aquello que sea necesario para mostrar el 
    // estado de la pagina relacionada con este punto del historial 
    // de navegacion. Por ejemplo mostrar un Panel anteriormente 
    // seleccionada por el usuario.
    lbl.setText("The current history token is: " + historyToken);
  }
}
	\end{lstlisting}
\end{itemize}
