| Astuce | ||
|---|---|---|
| ||
...
Sommaire :
| Sommaire | ||
|---|---|---|
|
...
...
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) {
[...]
}
[...]
}
|