Projets
Pages enfant
  • 3.13.2 Déchiffrer les URLs directes pour positionner l'application dans un état donné

Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.
Commentaire: Migrated to Confluence 5.3
Astuce
titleBon pour relecture

...

Sommaire :

Sommaire
maxLevel3

...

...

Du point de vue du programmeur, l'appréhension d'un lien direct consiste à :
  # Décoder les paramètres de l'URL,
  # Positionner les variables d'état (les contrôleurs de l'application) dans un état donné,
  # Envoyer sur la page _JSF_ voulue.

...

Remarque

Cette propriété est prioritaire. Cela signifie que si elle est renseignée, on utilise cette chaîne pour faire la redirection sinon on utilise la chaîne renvoyée par la méthode décrite dans l'ActionBinding

Pour en savoir plus...

Le cycle de vie JSF peut être décomposé en sept phases :
1- L’émission de la requête cliente demandant une ressource JSF
2- Reconstruction de l’arbre des contrôles
3- Application des valeurs de la requête
4- Validation des données saisies
5- Mise à jour des valeurs du modèle d’objets
6- L’invocation d’une application
7- L’affichage de la réponse

Pour déchiffrer une URL on doit alors être capable d’intercepter chaque requête utilisateur afin d’assurer l'affichage de la page demandée.

Techniquement l’interception dans le cadre JSF peut se faire en utilisant des écouteurs (listeners).
Les listeners peuvent être déclarés dans le fichier de configuration du composant : faces-config.xml.

Les UrlPatternDescriptor seront donc analysés par un listenener : DeepLinkingPhaseListener déclaré dans le cycle de vie JSF dans faces-config.xml :

Bloc de code

        <lifecycle>
		<phase-listener>org.esupportail.commons.jsf.DeepLinkingPhaseListener</phase-listener>
		<phase-listener>org.esupportail.commons.jsf.ResourceBundlePhaseListener</phase-listener>
	</lifecycle>

Selon les possibilités techniques offertes par JSF, il est possible que le listener agisse à la première phase du cycle de vie JSF (beforePhase) ou à la phase d’affichage de réponse(afterPhase).

Bloc de code

public class DeepLinkingPhaseListener implements PhaseListener {

	/**
	 * Constructor.
	 */
	public DeepLinkingPhaseListener() {
		super();
	}
	
	/**
	 * @see javax.faces.event.PhaseListener#afterPhase(javax.faces.event.PhaseEvent)
	 */
	public void afterPhase(final PhaseEvent arg0) {
		[...]
	}

	/**
	 * @see javax.faces.event.PhaseListener#beforePhase(javax.faces.event.PhaseEvent)
	 */
	public void beforePhase(final PhaseEvent event) {
		[...]
	}
[...]
}