是否必须在使用JSF时初始化“子对象”?

时间:2013-08-19 17:32:51

标签: jsf el

我有一个名为Customer的课程,另一个名为Person。班级Customer有一个属性Person,请参阅下面的代码;

public class Customer{

   private String name;
   private Person person;
}

但是当我尝试使用#{customerManagedBean.customer.person.id}时出现错误,因为我无法从人处获取属性ID,因为person为null。

所以我将代码更改为:

public Class Customer{

   public Customer{
   person = new Person();
   }

   private String name;
   private Person person;
}

一切正常。在使用之前是否必须初始化我班级中的所有对象?

2 个答案:

答案 0 :(得分:3)

是的,确实如此。 setter方法仅在最终属性上调用,即id。 JSF,或更具体地说,EL,不会为您自动创建嵌套属性。模型(支持bean)负责这一点。实际上,您应该在Person课程中创建CustomerManagedBean,而不是Customer课程。

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

答案 1 :(得分:0)

是。
Person的{​​{1}}或Customer方法

中初始化CustomerManagedBean个实例以及Constructor个实例