0

我目前在 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;
   }

}
4

0 回答 0