0

尝试向我们的 JSF 2 应用程序添加功能以列出活动用户(具有活动会话),为此我决定使用应用程序范围的托管 bean 并存储用户列表,并在成功登录时添加每个用户。然后我会从 jsf 页面访问活动用户列表(存储在应用程序范围的托管 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;
    }  
}

登录 Bean:

@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 行更改为 private AppBean appBean = new AppBean(); 2) 用户 userinSession 永远不会添加到(列表)connectedUsers。

这里有什么问题?

4

1 回答 1

1

JSF@ManagedProperty注释@ManagedBean仅在 JSF 中有效,在 CDI 中无效@Named

改为LoginBean由 JSF 管理@ManagedBean,或者将AppBeanbean 改为由 CDI 管理@Named,然后使用@Inject代替@ManagedProperty.

于 2012-05-14T15:15:08.990 回答