gpt4 book ai didi

jsf-2 - 当两个 bean 具有相同范围时,托管属性值不会更新

转载 作者:行者123 更新时间:2023-12-02 22:08:29 24 4
gpt4 key购买 nike

我在使用 @ManagedProperty 时看到了这种奇怪的行为。我有 2 个 bean :

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;
}
}

登录成功后,loggedIn的值仍然保持为false。

但是,如果我将 CartBean 的范围更改为 @ViewScopedloggedIn 的值会更新,我会看到系统输出。

根据我的理解以及在阅读各种文章之后,只有在相同更广泛 范围内才能注入(inject)托管 bean 或其属性。但是“相同范围”的情况似乎在我的代码中不起作用。我在这里缺少什么?

我正在使用:

  • Mojarra 2.1.16
  • Spring 3.2
  • 休眠 4.1
  • Tomcat 7.0.37

最佳答案

@ManagedProperty注解只能提供静态注入(inject),这意味着被注解的属性当且仅当持有@ManagedBean时才会被注入(inject)被实例化。

当您部署您的应用程序时,我相信您的 CartBean 是在开始时通过 View cart 按钮等引用的。因此,注入(inject)需要放置得太早并且由于 bean 是 @SessionScoped,您将携带初始 false 值直到时间结束:)。

与其只注入(inject) boolean 字段,不如注入(inject)整个 UserManager bean:

@ManagedBean
@SessionScoped
public class CartBean extends BaseBean implements Serializable {
@ManagedProperty(value = "#{userManager}")
private UserManager userManager;

public void updateCart(Movie selectedMovie) {
if (!userManager.isLoggedIn()) {
return;
}

...
}
}

关于jsf-2 - 当两个 bean 具有相同范围时,托管属性值不会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15747655/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com