JSF injection avec la gestion de la propriété, un bon modèle?

Je suis assez nouveau à JSF et pas vraiment "utilisé" pour les différents penser si je suis en difficulté sur ce que (je suppose) est de base.

Permet de dire que j'ai une classe de l'Utilisateur, qui est un bean de session.

Permet de dire que j'ai un contrôleur de 10000 objets, disons de l'Usine, qui doit être en mesure de régler certaines d'entre eux comme "verrouillé", dans notre cas, cela signifie que le "verrouillé" champ n'est pas nul, mais plus référence à un "LockedItem" objet.

C'est là que je ne peux pas faire les choses à travailler : LockedItem, lorsque vous l'instancier, est censé de référence de l'utilisateur actuellement connecté. Comment suis-je censé faire ?

J'ai essayé d'injection avec @managedproperty, mais elle est nulle en LockedItem.constructeur (ce qui est normal je suppose) puis j'ai essayé dans un @PostConstruct méthode, mais la méthode n'est jamais appelé (pourquoi ? Même si je me fais un managedbean... sont les postconstruct méthodes appelée lorsque l'objet est créé par l' ".xhtml" ?)
Ou dois-je utiliser un "java se" tromper, comme l'élaboration de l'Utilisateur statique ?


Code de préciser pourquoi un @PostConstruct pas appelé (celui de "Siège") :

.xhtml

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

Utilisateur

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


}

Voiture

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


}

Siège

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

Merci !

InformationsquelleAutor Qualaelay | 2012-09-07