我有一个问题,我不明白:在任何视图后面我有一个控制器ManagedBean是RequestScoped和数据ManagedBean,它包含视图的数据并且是SessionScoped。JSF2.0:ManagedProperty生命周期?
所以有两个视图,它们分别是loginData和loginController,以及overviewData和overviewController。
的功能应该是这样的:
- 用户登录到应用程序(的LoginController方法)
- 如果认证是全成,有一个重定向(在的LoginController方法再次)到overview.xhtml
- 然后overviewData由overviewController,这从商业逻辑层检索它们获取其数据
- 的overview.xhtml显示retireved数据
所以,重点是我想要登录后立即从loginController中填充overviewDataData! (如果可能的话,或如果可能的话,构建总览视图)。
我试过用managedProperties,但我在loginController中启动的是与overviewController中的managedProperty不同的对象,虽然它们具有相同的名称!这怎么可能。
哦,孩子,我怀疑你们明白我的意思,所以我需要发布一些代码:
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
}
...
OverviewData.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;
}
...
我希望可以帮助显示我的问题,如果你不明白,请问评论...
将是很好,如果你能帮助我:-)
干杯...
谢谢。另外,我愚蠢地忘记了设置和获取方法-... - – Sven 2010-11-16 07:46:40