如何防止在回发时调用@PostConstruct

时间:2012-11-06 13:49:45

标签: jsf-2 postback postconstruct

第一次加载页面时,会调用@PostConstruct,但是当我在此页面上执行回发时,会再次调用@PostConstruct

如何让它仅在初始请求时运行而不是在每次回发时运行?

@PostContruct
public void init() {
    // charge combos....
}

public void submit() { 
    // action 
}

2 个答案:

答案 0 :(得分:6)

显然,您的bean是请求作用域,因此在每个HTTP请求上重建。我不确定你为什么要阻止再次调用@PostConstruct,否则最终会出现“空”bean状态,这可能会导致表单提交错误,但好吧,你如果当前请求不是postback,则可以添加检查。

public void init() {
    if (!FacesContext.getCurrentInstance().isPostback()) {
        // charge combos....
    }
}

这样就不会在回发上调用“充电组合”部分。

或者,也许你的实际的问题不是“如何防止在回发时调用postconstruct?”,而是“如何在回发时保留相同的bean实例?”。在这种情况下,您需要将bean放在视图范围而不是请求范围中。

@ManagedBean
@ViewScoped
public class Bean implements Serializable {
    // ...
}

只要从操作方法返回null,只要您通过回发与相同的视图进行交互,这种方式就会生存相同的bean实例。这样就不会调用@PostConstruct(只是因为没有重建bean)。

另见:

答案 1 :(得分:-2)

使用此导入:

import javax.faces.view.ViewScoped;对于@ViewScoped