を使用すると、この奇妙な動作が見られ@ManagedProperty
ます。私は2つの豆を持っています:
UserManager (SessionScoped)
@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;
}
}
ログインに成功した後も、 の値はfalse のままですloggedIn
。
しかし、CartBean のスコープを に変更すると@ViewScoped
、 の値loggedIn
が更新され、sysout が表示されます。
私の理解によると、またさまざまな記事を読んだ後、マネージド Bean またはそのプロパティを注入できるのは、それが同じまたはより広いスコープである場合に限られます。しかし、「同じスコープ」のケースは私のコードでは機能しないようです。ここで何が欠けていますか?
私は使っている:
- モハラ 2.1.16
- 春 3.2
- 休止状態 4.1
- トムキャット 7.0.37