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

Dan*_*lla 5 postback postconstruct jsf-2

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

如何使其仅在初始请求上运行而不是在每次回发时运行?

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

public void submit() { 
    // action 
}
Run Code Online (Sandbox Code Playgroud)

Bal*_*usC 7

显然,您的bean是请求作用域,因此在每个HTTP请求上重建.我不确定你为什么要阻止@PostConstruct再次被调用,因为你最终会得到一个"空"bean状态,这可能会导致表单提交错误,但没关系,你可以添加一个检查是否当前请求不是回发.

public void init() {
    if (!FacesContext.getCurrentInstance().isPostback()) {
        // charge combos....
    }
}
Run Code Online (Sandbox Code Playgroud)

这样就不会在回发上调用"charge combos"部分.

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

@ManagedBean
@ViewScoped
public class Bean implements Serializable {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

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

也可以看看: