Bonsoir,
Est-ce-que il y a un autre moyen de définir la navigation des pages non pas dans le faces-config mais autrement?
Merci
Bonsoir,
Est-ce-que il y a un autre moyen de définir la navigation des pages non pas dans le faces-config mais autrement?
Merci
non c'est pas question si ça me gène ou autre ,car c’était dans une discussion.On m'as dit que je peux faire la navigation des pages dans les xhtml. et j'aimerais bien te demander pourquoi c'est déconseillé de mettre la navigation dans les xhtml ?
Merci
Parceque les XHtml sont censés ne gérer que la problématique affichage,une page n'est pas censée connaitre laquelle sera chargée quand elle rendra la main.La logique de navigation doit être découplée du contenu des pages.
Bonjour,
Si tu utilises NetBeans: dans le package "jsf.util" du package "source" il y a un fichier PaginationHelper.java, tu peux t'en inspirer. En principe il s'agit de créer un fichier NavigationRules.java dans le package "jsf.util" et d'y créer une classe du genre
Puis tu importes ce fichier dans chaqune de tes classes ObjetController.java et y déclares des
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 @ManagedBean(name = "navigationRules") @SessionScoped public class NavigationRules implements Serializable { private boolean modified = false; private boolean needCollectionReload = true; ... private String pageToLoad = ""; private String editObjectPage = "/dossier_de_Web Pages/pageEdit.xhtml"; public String pageToLoad() { this.modified = false; this.needCollectionReload = true; return pageToLoad; } public void setPageToLoad(String pageToLoad) { this.pageToLoad = pageToLoad; } public void prepareObjectPage() { setPageToLoad(editObjectPage); } // autres getters, setters et règles de navigation }
Moi j'aimerais bien savoir si c'est une pratique meilleure comme ça ou de façon "traditionnelle" (méthodes dans chaque controlleur qui initialisent les variables nécessaires et retournent la bonne page). Si quelqu'un pourrait m'éclairer... Merci!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 @ManagedProperty(value = "#{navigationRules}") private NavigationRules navigationRules;
Non c'est une mauvaise pratique que le controller connaisse la page qu'il va retourner. Ce genre d'instruction :
est à proscrire dans un Controller, pour la simple raison que le jour que tu vas modifier le nom de la page, penseras tu à y venir impacter? les framework MVC bien conçus délèguent cette navigation aux fichiers de configuration. Exemple JSF (c'est dans le fichier faces-config.xml) Struts (struts-config.xml) etc... . Un controller retourne un message, que ton framework (JSF ou Struts ou etc...) utilise via son fichier de configuration pour savoir sur quelle page rediriger.
Code : Sélectionner tout - Visualiser dans une fenêtre à part private String editObjectPage = "/dossier_de_Web Pages/pageEdit.xhtml";
Bonsoir,
Tout d'abord: merci de votre réponse!
Par "controller" je comprends une classe "ObjetController.java" du package projet.jsf. Je fais peut-être une confusion des termes...
Dans ces classes il y a des méthodes "public String prepareCreateObjet(){}" qui initialisent les objets à créer (créent un nouvel objet, réinitialisent les éventuels objets dépendants puis retournent une page "prepareCreateObjet.xhtml" ou des methodes "public String displayObjet(){}" qui ramènent le bon objet de la base de données et retournent la page à afficher. NetBeans génère comme ça les projets et c'est comme ça que j'ai l'habitude de travailler.
Est-ce que j'ai mal compris votre réponse ou c'est ma façon de travailler qui est mauvaise?
Edit: je précise que toutes mes pages .xhtml (prepareCreate.xhtml, edit.xhtml ou autre) sont affichées par l'appel à l'une des méthodes de la classe ObjetController.java mais j'ai des collègues qui utilisent ce type de "NavigationRules" d'où mon intérrêt pour le sujet...
Je n'ai jamais touché au fichier faces-config.xhtml, tout ce qu'il y a dedans c'est généré par NetBeans, c'est à direPourriez-vous me donner un exemple de ce que je devrais y ajouter?
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 <?xml version='1.0' encoding='UTF-8'?> <!-- =========== FULL CONFIGURATION FILE ================================== --> <faces-config version="2.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"> <application> <resource-bundle> <base-name>/Bundle</base-name> <var>bundle</var> </resource-bundle> <resource-bundle> <base-name>/Bundle</base-name> <var>bundle</var> </resource-bundle> </application> </faces-config>
Merci!
Bonjour,désolé du retard de ma réponse, en fait mettre explicitement le chemin et le nom d'une page à afficher dans un controleur est déconseillé,la conséquence est une maintenance pas aisée,mais je sais bien que beaucoup de gens le font,quand c'est possible il faut eviter,le mieux c'est de retourner un mot clé qui sera utilisé par ton fichier de config pour afficher la bonne page.En tapant "Navigation in JSF2" tu as des tonnes d'exemples comme ce pdf.C'est juste des bonnes pratiques,après chacun procède comme il veut.
Merci de votre reponse!
C'est justement parce que mon projet de fin d'études est nettement plus complexe que les précédents que je voulais explorer d'autres possibilités: vous avez tout à fait raison concernant la maintenance.
Bien que je dispose du code d'un exemple NavigationRules je voulais savoir si c'est une bonne pratique.
Il me semble que ça nécessite une bonne maîtrise du XML, ce qui n'est pas mon cas. Mais l'on peut toujours essayer de corriger les mauvaises habitudes et d'apprendre les bonnes pratiques.
Encore merci de votre reponse et merci à ahmedpa pour l'amabilité de me permettre poser mes questions à ce sujet!
Partager