J'ai un problème Je ne comprends pas: Derrière une vue, j'ai un contrôleur ManagedBean qui est RequestScoped et un Data ManagedBean, qui contient les données pour la vue et est SessionScoped. Il y a donc deux vues, qui sont login avec loginData et loginController et une vue d'ensemble avec overviewData et overviewController.JSF2.0: cycle de vie ManagedProperty?
La fonctionnalité devrait être comme ça:
- Les journaux de l'utilisateur dans l'application (méthode loginController)
- Si l'authentification est réussie, il y a une redirection vers overview.xhtml (encore une fois dans la méthode loginController)
- Ensuite, la overviewData obtient ses données par le overviewController, qui les récupère de la couche logique métier
- le overview.xhtml montre les données retireved
Donc, le point est que je veux remplir overviewData de loginController, juste après la connexion! (??? ou si possible juste befor vue d'ensemble est construit, si possible ???).
Je l'ai essayé avec managedProperties, mais celui que je lance dans loginController est un objet différent de managedProperty dans overviewController, bien qu'ils aient le même nom! Comment est-ce possible.
Oh boy, je doute que vous les gars à comprendre ce que je veux dire, alors je dois poster un code:
LoginController.java
...
@ManagedBean
@RequestScoped
public class LoginController {
@ManagedProperty(value = "#{overviewData}")
private OverviewData overviewData;
OverviewController overviewController;
public LoginController(){
overviewController = new OverviewController();
}
String login() throws Exception {
UsernamePasswordToken token = new UsernamePasswordToken(loginData.getName(), loginData.getPw().trim());
try {
currentUser.login(token);
overviewController.fillProjects();
...
OverviewController.java
...
@ManagedBean
@RequestScoped
public class OverviewController {
@ManagedProperty(value = "#{overviewData}")
private OverviewData overviewData;
public void fillProjects(){
if(overviewData == null){
overviewData = new OverviewData();
}
overviewData.setProjects(projectService.getProjects()); //retrieves data from business logic
}
...
PrésentationData.java
...
@ManagedBean(name = "overviewData")
@SessionScoped
public class OverviewData {
private List<ProjectDTO> projects; //that's what the view needs to display the overview
public void setProjects(List<ProjectDTO> projects) {
this.projects = projects;
}
...
J'espère que aide à montrer mon problème, si vous ne comprenez pas, pls demander dans un commentaire ..
Ce serait bien si vous pouvez me aider :-)
Bravo ...
Merci. De plus j'oublie bêtement de faire le set et d'avoir des méthodes -.- – Sven