我有一个 SessionScoped
bean 说UserSession
它拥有一个 String 属性 token
它充当已登录用户的经过身份验证的 token 。此 token 被注入(inject)其他 SessionScoped
和 ViewScoped
beans 以便他们可以使用此 token 并执行操作。注入(inject)属性没有问题。
但是,有一个用例,其中 token
在UserSession
本身被不同的字符串替换。一旦我这样做,其他 bean 仍然引用 token
的旧值。这导致无效访问。
我如何通知其他 bean 这个值的变化?还是通过
检索 bean 实例 FacesContext context = FacesContext.getCurrentInstance();
Application app = context.getApplication();<br/>
UserSession session = (UserSession) app.evaluateExpressionGet(context, "#{userSession}", UserSession.class);
然后检索token
作为session.getToken()
?
我正在使用 Mojarra 2.0.4
最佳答案
我不明白为什么这是个问题。这听起来更像是您正在复制属性,如下所示:
@ManagedBean
@SessionScoped
private OtherBean {
@ManagedProperty(value="#{userSession}")
private UserSession userSession;
private String token;
@PostConstruct
public void init() {
this.token = userSession.getToken();
}
public void someAction() {
doSomethingWith(token);
}
public void otherAction() {
doSomethingElseWith(token);
}
// ...
}
虽然您应该直接访问它:
// ...
public void someAction() {
doSomethingWith(userSession.getToken());
}
public void otherAction() {
doSomethingElseWith(userSession.getToken());
}
// ...
相应地修复您的 bean 以摆脱包含副本的私有(private) token 属性,让所有方法直接从注入(inject)的 bean 中获取它。
关于java - 通过@ManagedProperty 检索更新的值/通知其他 beans 属性的更新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6329544/