1

我正在使用 jsf 2.0.2 + richfaces 3.3.3。我该怎么做才能不会多次调用我的吸气剂?

我有这个:

@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;
    }

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

4

2 回答 2

3

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

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

也可以看看:

于 2010-08-06T13:55:48.523 回答
0

使用 getter setter 创建一个 myclass 属性并返回它,这样在引用时它将被维护,并且还使用问题中提到的 null 检查。祝你今天过得愉快

于 2010-08-02T11:42:21.333 回答