我目前在 Mojarra 2.2.14 中遇到了 @PreDestroy 方法的奇怪问题:行为似乎是某种未定义的。有时在@PostConstruct 之后直接调用一次,有时在再次触发 GET 时调用两次。离开当前页面时相同:有时会调用 clear(),但大多数时候不会。另一方面,@PostConstruct 按预期工作。
结果是,ProductDetailBean 的所有字段都为空,因此调用页面“productDetails.xhtml”。
关于@PreDestroy 有一些已知问题吗?如果有人能提供一些有用的信息,那就太好了。什么是合适的解决方法?这个 bean 有很多字段,我非常有兴趣在用户离开页面时清除所有内容。
可悲的是,我现在无法更改为 CDI-Beans ......
@ManagedBean(name="productDetail") //javax.faces.bean.ManagedBean
@ViewScoped //javax.faces.bean.ViewScoped
public class ProductDetailBean implements Serializable {
private String field;
@PostConstruct
public void init(){
System.out.println("init Behaviour is ok, callend only once!");
this.field = "blah";
}
@PreDestroy
public void clear(){
System.out.println("called one or multiple times after init() ");
this.field = null;
}
public void setField(String field) {
this.field = field;
}
public String getField() {
return this.field;
}
}