我有一个名为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;
}
一切正常。在使用之前是否必须初始化我班级中的所有对象?
答案 0 :(得分:3)
是的,确实如此。 setter方法仅在最终属性上调用,即id
。 JSF,或更具体地说,EL,不会为您自动创建嵌套属性。模型(支持bean)负责这一点。实际上,您应该在Person
课程中创建CustomerManagedBean
,而不是Customer
课程。
它适用于托管bean只是因为那些托管bean通过@ManagedBean
或@Named
显式注册为在EL范围内不存在时自动创建。这反过来又不适用于它们的嵌套属性。
答案 1 :(得分:0)
是。
在Person
的{{1}}或Customer
方法
CustomerManagedBean
个实例以及Constructor
个实例