我在使用@ManagedProperty
. 我有2个豆子:
用户管理器(会话范围)
@ManagedBean
@SessionScoped
public class UserManager extends BaseBean implements Serializable
{
private static final long serialVersionUID = 1861000957282002416L;
private User currentUser;
public String login()
{
// set value of currentUser after authentication
}
public User getCurrentUser() {
return currentUser;
}
public boolean isLoggedIn() {
return getCurrentUser() != null;
}
}
CartBean(也是SessionScoped)
...
import javax.faces.bean.ManagedProperty;
...
@ManagedBean
@SessionScoped
public class CartBean extends BaseBean implements Serializable
{
@ManagedProperty(value = "#{userManager.loggedIn}")
private boolean loggedIn;
public void updateCart(Movie selectedMovie)
{
if (!loggedIn) {
return;
}
System.out.println("UPDATE CART REQUEST");
int id = selectedMovie.getMovieID();
if (cart.containsKey(id)) {
cart.remove(id);
}
else {
cart.put(id, selectedMovie);
}
}
public void setLoggedIn(boolean loggedIn) {
this.loggedIn = loggedIn;
}
}
登录成功后, 的值loggedIn
仍然保持为false。
但是,如果我将 CartBean 的范围更改为@ViewScoped
,则值loggedIn
会更新并且我会看到 sysout。
根据我的理解,并且在阅读了各种文章之后,只有当它具有相同或更广泛的范围时,才能注入托管 bean 或其属性。但是“相同范围”的情况似乎在我的代码中不起作用。我在这里想念什么?
我在用:
- 莫哈拉 2.1.16
- 春天 3.2
- 休眠 4.1
- 雄猫 7.0.37