Après la première saisie, l'URL des pages affichage_1 et formulaire_1 est toujours en retard d'une page.
La raison se trouve dans le code HTML généré par JSF : l'action du formulaire de la page formulaire_1 désigne la page formulaire_1 elle-même (alors qu'on avait bien écrit action="affichage_1" dans la page JSF). Quand la page affichage_1 est affichée, le navigateur pense donc qu'il est toujours dans la page "d'avant", formulaire_1. Il en est de même dans la page affichage_1. Le code généré est un peu différent car il s'agit d'un <h:commandLink> et pas d'un <h:commandButton> mais l'action du formulaire désigne bien encore la page affichage_1 elle-même.
Pourquoi le code HTML généré par JSF a une action qui indique la page qui contient le formulaire et pas la prochaine page à afficher ? C'est l'étude du cycle de vie qui l'explique : quand la requête POST arrive sur le serveur, c'est la page qui contient le formulaire qui est restaurée (phase "Restore View", pour effectuer ensuite la suite du cycle de vie, en particulier les validations sur les valeurs saisies par l'utilisateur) et la page qui sera retournée au client HTTP n'est bien souvent connue qu'ensuite quand la méthode action termine son exécution et retourne le nom de la page à retourner. Ni le navigateur ni même le code statique de la méthode action ne peuvent indiquer le nom de la page à retourner. Quand la page est retournée, le navigateur se comporte donc comme s'il était toujours dans la page du formulaire.
<?xml version='1.0' encoding='UTF-8' ?> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"><head id="j_idt2"> <title>Application>formulaire_1</title></head><body> <h1>Application>formulaire_1</h1> <form id="j_idt6" name="j_idt6" method="post" action="/tpprg/formulaire_1.xhtml" enctype="application/x-www-form-urlencoded"> <input type="hidden" name="j_idt6" value="j_idt6" /> <label for="j_idt6:nombre">Entrez un nombre</label><input id="j_idt6:nombre" type="text" name="j_idt6:nombre" value="0" /><input type="submit" name="j_idt6:j_idt9" value="Valider" /><input type="hidden" name="javax.faces.ViewState" id="j_id1:javax.faces.ViewState:0" value="-4203864120607015336:4109096417636832947" autocomplete="off" /> </form></body> </html>
<?xml version='1.0' encoding='UTF-8' ?> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"><head id="j_idt2"> <title>Application>affichage_1</title></head><body> <h1>Application>affichage_1</h1> Les nombres : <br /> 10, 11, 12, 13, 14 <form id="j_idt8" name="j_idt8" method="post" action="/tpprg/affichage_1.xhtml" enctype="application/x-www-form-urlencoded"> <input type="hidden" name="j_idt8" value="j_idt8" /> <script type="text/javascript" src="/tpprg/javax.faces.resource/jsf.js?ln=javax.faces"></script> <a href="#" onclick="mojarra.jsfcljs(document.getElementById('j_idt8'),{'j_idt8:j_idt9':'j_idt8:j_idt9'},'');return false">Saisir un autre nombre</a><input type="hidden" name="javax.faces.ViewState" id="j_id1:javax.faces.ViewState:0" value="-4203864120607015336:-2804355069522647210" autocomplete="off" /> </form></body> </html>