尝试向我们的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为null,除非我将LoginBean.java的第6行更改为私有AppBean appBean = new AppBean(); 2)用户userinSession永远不会添加到(List)connectedUsers。
这里有什么问题?
答案 0 :(得分:1)
JSF @ManagedProperty
注释仅适用于JSF @ManagedBean
,而不适用于CDI @Named
。
更改要由JSF LoginBean
管理的@ManagedBean
,或将AppBean
bean更改为由CDI @Named
管理,然后使用@Inject
代替@ManagedProperty
。