通过@ManagedProperty检索更新的值/通知其他bean的属性的更新值

时间:2011-06-13 11:02:13

标签: java jsf-2

我有一个SessionScoped bean说UserSession,它包含一个String属性token,它充当登录用户的经过身份验证的令牌。此令牌将注入其他SessionScopedViewScoped 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

1 个答案:

答案 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中获取它。