我有一個問題,我不明白:在任何視圖後面我有一個控制器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