Bonjour à toutes et à tous,
Je développe depuis peu sur les JSF. Je cherche à mettre en place une politique de sécurité (affichage de certains composant suivant différentes données utilisateurs et métiers) et d'intertionalisation. L'idée est appliquer cette politique juste à avant que les composants soient affichés.
Ma première idée et la seule que j'ai eu pour l'instant est de mettre en place un PhaseListener sur la phase Render Response. voici son code simplifié
Le code n'a rien de sorcier. Le hic que je rencontre est que lorsque la méthode beforePhase est appelé, le UIViewRoot ne contient aucun enfants.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 public class SecurityManager implements PhaseListener { public void beforePhase(PhaseEvent event) { // les composants ne sont pas affichés // idéal pour mettre les politiques UIViewRoot racine = phaseEvent.getFacesContext().getViewRoot(); if (racine == null){ return; } // Je parcours mon arbre de composants for (int index = 0; index < racine.getChildCount(); index ++){ if (racine.getChildren().get(index) instanceof UIComponent) SecurityFactory.getInstance().applySecurity( (UIComponent)racine.getChildren().get(index)); } } } public void afterPhase(PhaseEvent event) { // les composants sont déjà affiché ici } public PhaseId getPhaseId() { return PhaseId.RENDER_RESPONSE; } }
De la même manière, la racine possède des composants fils lors de l'appel de la méthode afterPhase() mais comme les composants sont déjà affiché c'est trop tard. L'utilisateur peut toujours faire un F5 mais c'est moyen comme solution (vive la satisfaction client).
L'arborescence est crée entre les appels de méthodes beforePhase() et afterPhase() par le ViewHandler selon ce que j'ai compris. Est il possible de reprendre la main entre la création de l'arborescence et l'affichage de composants.
J'ai lu d'autres sujets sur ce theme, mais très peu avec des réponses et aucun avec une solution viable (c'est à dire en gardant le même esprit de parcours de composants à la volée). Un petit coup de main serai le bienvenue.
Merci et à +
Partager