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

标签 java jsf-2

我有一个 SessionScoped bean 说UserSession它拥有一个 String 属性 token它充当已登录用户的经过身份验证的 token 。此 token 被注入(inject)其他 SessionScopedViewScoped beans 以便他们可以使用此 token 并执行操作。注入(inject)属性没有问题。

但是,有一个用例,其中 tokenUserSession本身被不同的字符串替换。一旦我这样做,其他 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/

相关文章:

java - 如何调用传递到 XSLT 的 Java 实例上的方法?

java - FFmpeg - 找不到 ExecuteBinaryResponseHandler - Android/Java

java - 如何确定 Apache Spark 中的偏移量?

java - 在 JSP 中打印数据表标题

jsf - JSF 2 和 IceFaces 2 的 Maven 依赖项

jsf - 在 JSF 中从日期的一种字符串表示形式转换为另一种表示形式

Java机器人类

从 MySql 数据库读取时出现 Java Preparedstatement 错误

spring - NoSuchMethodError : FaceletsAuthorizeTag. setIfAllGranted

java - 如何使用一个托管 bean 执行两种方法并将数据保存在变量中?