私はJSFにまったく慣れておらず、さまざまな考え方に実際に「慣れていない」ので、何が基本であるかに苦労しています。
セッション Bean である User クラスがあるとします。
Factoryなどの10000個のオブジェクトのコントローラーがあり、それらの一部を「ロック済み」として設定できる必要があるとしましょう。この場合、「ロック済み」フィールドはもうnullにならず、「LockedItem」を参照します。物体。
これは、私が物事を機能させることができない場所です: LockedItem をインスタンス化すると、現在ログインしているユーザーを参照することになっています。
@managedproperty でインジェクションを試みましたが、LockedItem.constructor では null であり (これは正常だと思います)、@PostConstruct メソッドで試しましたが、そのメソッドは呼び出されません (なぜですか?マネージド Bean にしても...オブジェクトが「.xhtml」によって作成されたときにのみ、ポストコンストラクトメソッドが呼び出されますか?)または、ユーザーを静的にするなど、「java se」トリックを使用する必要がありますか?
@PostConstruct が呼び出されない理由を明確にするコード (「Seat」の 1 つ) :
.xhtml
<h:outputLabel id="user" value="Hello #{user.name}" />
<h:outputLabel id="car" value="you have #{car.brand}" />
ユーザー
package test;
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean
@SessionScoped
public class User implements Serializable {
private String name ;
public User()
{
name = "toto";
System.out.println("User constructor");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
車
package test;
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
@ManagedBean
public class Car implements Serializable {
private String brand ;
private Seat seat ;
public Car()
{
brand = "audi" ;
seat = new Seat();
System.out.println("Car constructor") ;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
}
シート
package test;
import java.io.Serializable;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
@ManagedBean
public class Seat implements Serializable {
private int nb ;
private String userName ;
@ManagedProperty("#{user}")
private User user ;
public Seat()
{
nb = 4 ;
userName="na";
System.out.println("! Seat constructor ") ;
}
@PostConstruct
public void init()
{
System.out.println("!! Seat postconstruct : "+user.getName());
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public int getNb() {
return nb;
}
public void setNb(int nb) {
this.nb = nb;
}
}
ありがとう !