2

と呼ばれるクラスとCustomerと呼ばれる別のクラスがありPersonます。クラスCustomerにはプロパティがありますPerson。次のコードを参照してください。

public class Customer{

   private String name;
   private Person person;
}

しかし、使用しようとすると#{customerManagedBean.customer.person.id}、人が null であるため、人からプロパティ ID に到達できないため、エラーが発生しました。

だから私は自分のコードを次のように変更しました:

public Class Customer{

   public Customer{
   person = new Person();
   }

   private String name;
   private Person person;
}

そして、すべてがうまくいきます。クラスを使用する前に、クラス内のすべてのオブジェクトを初期化する必要がありますか?

4

2 に答える 2

3

はい、そうです。setter メソッドは、最終プロパティである でのみ呼び出されますid。JSF、より具体的にはELは、ネストされたプロパティを自動作成しません。モデル (バッキング Bean) がそれを担当します。Person実際には、CustomerManagedBeanクラスではなく、クラスで作成する必要がありますCustomer

マネージド Bean で機能するのは、それらのマネージド Bean がEL スコープにまだ存在しない場合に自動作成されるように、@ManagedBeanまたは明示的に登録されているためです。@Namedこれは、ネストされたプロパティには適用されません。

于 2013-08-19T17:37:17.797 に答える
0

はい。またはメソッド内のインスタンスとともにインスタンスを
初期化しますPersonCustomerCustomerManagedBeanConstructor@PostConstruct

于 2013-08-19T18:38:30.320 に答える