2012-05-14 158 views
0

嘗試向我們的JSF 2應用程序添加功能以列出活動用戶(擁有活動會話),爲此我決定使用應用程序範圍的託管bean並存儲用戶列表,並在成功登錄時添加每個用戶列表。然後,我會從一個JSF頁面訪問活動的用戶列表(存儲在應用範圍的託管bean) - 僅如果我能想出如何解決以下問題:修改從另一個託管bean作爲託管屬性訪問的託管bean的私有對象屬性

應用範圍的bean:AppBean.java

@ManagedBean(name = "appBean") 
@ApplicationScoped 
public class AppBean implements java.io.Serializable { 

    private List<User> connectedUsers = new ArrayList<User>(); 

    public AppBean() { 
    } 

    public List<User> getConnectedUsers() { 
     return connectedUsers; 
    } 

    public void setConnectedUsers(List<User> connectedUsers) { 
     this.connectedUsers = connectedUsers; 
    } 
} 

登錄豆:

@Named(value = "loginBean") 
@SessionScoped 
public class LoginBean implements Serializable { 

    @ManagedProperty("#{appBean}") 
    private AppBean appBean; 

    private User userInSession; 

    public LoginBean() { 
    } 

    public String authenticate() { 
     if (this.authClearsOut()) { 
      if (appBean != null) 
       appBean.getConnectedUsers().add(userInSession); 
      else System.out.println("appBean = null !!!!"); 
      return "/next_screen.xhtml?redirect=true"; 
     } 
     else return "/login.xhtml?authentication=failed"; 
    } 

    public AppBean getAppBean() { 
     return appBean; 
    } 

    public void setAppBean(AppBean appBean) { 
     this.appBean = appBean; 
    } 
} 

現在有兩個問題在這裏: 1)appBean爲空,除非我改變LoginBean.java線6私人appBean appBean =新appBean(); 2)用戶userinSession不會被添加到(List)connectedUsers。

這裏有什麼問題?

+0

我的猜測是,今天給出的這個答案適用於你的情況,以及:http://stackoverflow.com/a/10583350/870122 – perissf

+0

由下面同一個人回答,但謝謝:) – Skyhan

回答

1

JSF @ManagedProperty註釋僅適用於JSF @ManagedBean,不適用於CDI @Named

更改LoginBean由JSF @ManagedBean進行管理,而不是,或更改AppBean豆由CDI @Named進行管理,然後用@Inject,而不是@ManagedProperty