Bonjour/Bonsoir,
Dans le cadre d'un projet de fin de formation, j'essaie de mieux comprendre le fonctionnement de JSF et notamment le comportement des managedBeans
Pour avancer dans mon projet j'aimerais pouvoir "coupler" plusieurs managedBean dans un seul, mais pour le moment je sèche.
Au niveau de l'architecture j'ai :
Un module de login, qui comporte 2 case à remplir (identifiant et mot de passe) avec les labels et tout ce qui va bien.
Un template de page (pour les menu, pied de page ...)
Une page qui utilise le template et embarque le module dans un formulaire avec un boutton "connexion".
Au niveau des managedBean j'en ai un pour l'utilisateur (login/password) et un pour la page final.
Comment la page final peut-elle recuperrer les information du ManagedBean utilisateur ?
Pour ce qui est des codes :
Le module:
La page finale
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:ui="http://xmlns.jcp.org/jsf/facelets" xmlns:p="http://primefaces.org/ui"> <p:fieldset legend="Login"> <h:panelGrid columns="2" cellpadding="5"> <p:outputLabel for="login" value="Login: " /> <p:inputText id="login" value="#{mBWebsiteUser.websiteUser.login}" /> <p:outputLabel for="password" value="Password: " /> <p:password id="password" value="#{mBWebsiteUser.password}" /> </h:panelGrid> </p:fieldset> </ui:composition>
Et les managedBean
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 [...] <h:body> <ui:composition template="/template/template.xhtml"> <ui:define name="body"> <h:form> <ui:include src="../module/loginForm.xhtml" /> <h:commandButton value="Connection" actionListener="#{mBControllerLogin.isLogged()}"/><br/> </h:form> </ui:define> </ui:composition> </h:body>
De l'utilisateur
La page
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 @Named(value = "mBWebsiteUser") @SessionScoped public class MBWebsiteUser implements Serializable { private IManagerWebsiteUser managerWebsiteUser; private WebsiteUser websiteUser; public MBWebsiteUser() { ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); managerWebsiteUser = (IManagerWebsiteUser) context.getBean("ManagerWebsiteUser"); managerWebsiteUser.prepare(); websiteUser = new WebsiteUser(); } // les getters et setters }
En l'état actuelle des choses, websiteUser (dans le MB de la page) est vide, et ne contient pas les données saisie dans la page.
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 @Named(value = "mBControllerLogin") @SessionScoped public class MBControllerLogin implements Serializable { @ManagedProperty("#{mBWebsiteUser.websiteUser}") private WebsiteUser websiteUser; public MBControllerLogin() { } public String isLogged() { return CommonUser.INSTANCE.login(websiteUser); } public void setWebsiteUser(WebsiteUser websiteUser) { this.websiteUser = websiteUser; } }
Je ne sais pas si j'aborde la question sous le bon angle de vue ? ni comment trouver une solution à ce problème.
J'ai aussi essayé de récupérer le managedBean depuis la session, mais rien n'y fait.
Merci d'avance pour vos idée et réponses
Partager