在会话管理bean中阻止多个getter调用?

时间:2010-08-02 11:10:02

标签: jsf jsf-2 session-variables getter

我正在使用jsf 2.0.2 + richfaces 3.3.3。 我该怎么做才能多次调用我的getter?

我有这个:

@ManagedBean(name = "mybean")
@SessionScoped
public class mybean implements Serializable {        
public MyClass getMyClass() {
        if (FacesContext.getCurrentInstance().getRenderResponse()) {
            myClass = get_it_from_database();
        }
        return myClass;
    }

我也用过这个:

@ManagedBean(name = "mybean")
@SessionScoped
public class mybean implements Serializable {        
public MyClass getMyClass() {
        if (myClass = null) {
            myClass = get_it_from_database();
        }
        return myClass;
    }

但我想要的是每当我刷新页面时“刷新”我的数据......

2 个答案:

答案 0 :(得分:3)

你不能阻止这一点。这就是吸气剂的本质。 getter方法旨在返回数据(读取:为外部提供接入点),而不是加载数据。你通常在那里使用bean构造函数@PostConstruct或action方法。

要解决您的特定问题,请将bean重新声明为请求作用域,并将行myClass = get_it_from_database();移动到bean的构造函数或@PostConstruct方法(如果它已注入依赖项)。或者,如果你真的坚持保持会话作用域(你应该更喜欢有两个bean:一个会话作用于会话作用域数据,一个请求作用于请求作用域数据),那么你的第一种方法是最合理的。

另见:

答案 1 :(得分:0)

使用getter setter创建一个class属性,然后返回刷新它将被维护,ha也使用null检查,如上所述。祝你有愉快的一天