2

我有一个班级Customer,另一个班级Person。该类Customer有一个属性Person,见下面的代码;

public class Customer{

   private String name;
   private Person person;
}

但是当我尝试使用时,#{customerManagedBean.customer.person.id}我得到了一个错误,因为我无法从 person 获得属性 id,因为 person 为空。

所以我将代码更改为:

public Class Customer{

   public Customer{
   person = new Person();
   }

   private String name;
   private Person person;
}

一切正常。在使用它之前是否强制初始化我的类中的所有对象?

4

2 回答 2

3

是的。setter 方法仅在最终属性上调用,即id. JSF,或者更具体地说,EL,不会为您自动创建嵌套属性。模型(支持 bean)对此负责。你实际上应该在课堂上创作PersonCustomerManagedBean而不是在Customer课堂上。

它适用于托管 bean 仅仅是因为这些托管 bean 是通过@ManagedBean@Named显式注册为在 EL 范围中不存在时自动创建的。这反过来不适用于它们的嵌套属性。

于 2013-08-19T17:37:17.797 回答
0

是的。
初始化Person实例以及's或方法中的Customer实例CustomerManagedBeanConstructor@PostConstruct

于 2013-08-19T18:38:30.320 回答