簡體   English   中英

為什么不能在另一個bean的構造函數中獲得SessionScoped bean的值?

[英]Why cant I get the value of a SessionScoped bean in the constructor of another bean?

我有這個SessionScoped bean:

@ManagedBean
@SessionScoped
public class LoginBean implements Serializable {

/**
 * Creates a new instance of LoginBean
 */
public LoginBean() {
    this.usuario = new Usuario();
}

private Usuario usuario;
//getter & setter

}

Usuario類:

public class Usuario {

public Usuario() {
}

private String password;
private String nombre;
private int idPlanta;
private int nivel;
private String idUsuario;
//getters & setters
}

我想從SessionScoped豆(LoginBean)這里(構造函數)的財產idPlanta的價值看的評論

@ManagedBean
@ViewScoped
public class PrincipalBean implements Serializable {

public PrincipalBean() {
    System.out.println(this.login.getUsuario().getIdPlanta());
    //AT THIS POINT THE VALUE OF idPlanta IS 0 but in the session I have 1...
    //Method that uses the idPlanta value as a parameter
}

@ManagedProperty(value = "#{loginBean}")
private LoginBean login;

public LoginBean getLogin() {
    return login;
}

public void setLogin(LoginBean login) {
    this.login = login;
}

}

但是,當我在視圖中顯示該值時,它顯示的是Session idPlanta = 1中的實際值。我不明白為什么我無法在該ViewScoped bean(PrincipalBean)的構造函數中獲得該屬性的值。 我在這里的視圖中顯示該值(我知道我可以直接從LoginBean獲得它,但這只是為了表明PrincipalBean中的屬性login具有Session值):

<h:outputText class="titulo" value="Bienvenido(a) #{principalBean.login.usuario.nombre} Planta #{principalBean.login.usuario.idPlanta}" />

PrincipalBean中idPlanta的值非常重要,因為在顯示視圖時,我將其用作方法參數以顯示更多信息。

請幫我。 我還在學習JSF。

在構造bean之后,您需要使用這些值。 調用構造函數時,您的bean尚未初始化-因此尚未進行注入。 使用@PostConstruct方法,您將能夠從注入的對象訪問所需的值。

例如 :

@ManagedBean
@ViewScoped
public class PrincipalBean implements Serializable {

    public PrincipalBean() {

    }

    @PostConstruct
    public init() {
        System.out.println(this.login.getUsuario().getIdPlanta());
        //AT THIS POINT THE VALUE OF idPlanta IS 0 but in the session I have 1...
        //Method that uses the idPlanta value as a parameter
    }

    @ManagedProperty(value = "#{loginBean}")
    private LoginBean login;

    public LoginBean getLogin() {
        return login;
    }

    public void setLogin(LoginBean login) {
        this.login = login;
    }
}

也可以看看

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM