Инъекция JSF с управляемым свойством, хороший шаблон?
я совсем новичок в JSF и не оченьиспользуемый" к другому мышлению, поэтому яЯ борюсь за то, что (я предполагаю) является основным.
Допустим, у меня есть класс User, который является сессионным компонентом.
Допустим, у меня есть контроллер из 10000 объектов, скажем, Factory, который должен быть в состоянии установить некоторые из них как "заблокирован»в нашем случае это означает, чтозаблокирован» поле больше не становится нулевым, но ссылается на "LockedItem» объект.
Вот где я могучтобы все заработало: LockedItem, когда вы его создаете, должен ссылаться на пользователя, который в данный момент вошел в систему. Как я должен это сделать?
Я попытался выполнить инъекцию с @managedproperty, но в LockedItem.constructor это значение равно нулю (что, как я полагаю, нормально), затем я попытался использовать метод @PostConstruct, но этот метод никогда не вызывается (почему? Даже если я сделаю его управляемым ... методы постконструкции вызываются только тогда, когда объект создается.xhtml» ?) Или я должен использовать "ява се " трюк, как сделать пользователя статичным?
Код для пояснения, почему не вызывается @PostConstruct (один из "сиденье»):
.xhtml
пользователь
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;
}
}
Спасибо !