为什么我不能在另一个bean的构造函数中获得SessionScoped bean的值?

时间:2014-09-29 22:51:36

标签: jsf managed-bean session-scope

我有这个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 bean(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中的属性登录具有Session值):

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

PrincipalBean中idPlanta的值非常重要,因为我将它用作方法参数,以便在显示视图时显示更多信息。

请帮帮我。我还在学习JSF。

1 个答案:

答案 0 :(得分:1)

在构造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;
    }
}

另请参阅