Инъекция JSF с управляемым свойством, хороший шаблон?

Я совсем новичок в JSF и на самом деле не "использовал" к другому мышлению, поэтому я борюсь за то, что (я полагаю) является основным.

Допустим, у меня есть класс User, который является сессионным компонентом.

Допустим, у меня есть контроллер из 10000 объектов, скажем, Factory, который должен быть в состоянии установить некоторые из них как «заблокированные», в нашем случае это означает, что «заблокирован» поле больше не становится нулевым, но ссылается на «LockedItem» объект.

Вот где я не могу заставить вещи работать: LockedItem, когда вы его создаете, должен ссылаться на пользователя, который в данный момент вошел в систему. Как я должен это делать?

Я попытался выполнить инъекцию с @managedproperty, но в LockedItem.constructor это значение равно нулю (что, как я полагаю, нормально), затем я попытался использовать метод @PostConstruct, но этот метод никогда не вызывается (почему? Даже если я сделаю его управляемым ... методы постконструкции вызываются только тогда, когда объект создается с помощью & quot; .xhtml & quot;?) Или я должен использовать & quot; java se & quot; трюк, как сделать пользователя статичным?

Код, поясняющий, почему не вызывается @PostConstruct (один из "Seat"):

.xhtml

<h:outputLabel id="user" value="Hello #{user.name}" />
<h:outputLabel id="car" value="you have #{car.brand}" />

User

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;
    }


}

Car

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;
    }


}

Seat

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;
    }
}

Спасибо !

Ответы на вопрос(1)

Ваш ответ на вопрос