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)
显然,您的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).
| 归档时间: |
|
| 查看次数: |
5837 次 |
| 最近记录: |