我有一个SessionScoped
bean说UserSession
,它包含一个String属性token
,它充当登录用户的经过身份验证的令牌。此令牌将注入其他SessionScoped
和ViewScoped
bean,以便它们可以使用此令牌并执行操作。注入房产没有问题。
但是,有一个用例,其中token
本身的UserSession
被不同的字符串替换。一旦我这样做,其他bean仍然引用token
的旧值,导致无效访问。
如何通知其他bean此值更改?或者我通过
检索bean实例 FacesContext context = FacesContext.getCurrentInstance();
Application app = context.getApplication();
UserSession session = (UserSession) app.evaluateExpressionGet(context, "#{userSession}", UserSession.class);
然后将token
检索为session.getToken()
?
我正在使用Mojarra 2.0.4
答案 0 :(得分:3)
我不明白为什么这是一个问题。这听起来好像就像你正在复制属性一样:
@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以摆脱包含副本的私有令牌属性,让所有方法直接从注入的bean中获取它。