【问题标题】:Why cant I get the value of a SessionScoped bean in the constructor of another bean?为什么我不能在另一个 bean 的构造函数中获取 SessionScoped bean 的值?
【发布时间】:2014-09-29 22:51:35
【问题描述】:

我有这个 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 的值查看 cmets

@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。

【问题讨论】:

    标签: jsf managed-bean session-scope


    【解决方案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;
        }
    }
    

    另见

    【讨论】:

      猜你喜欢
      • 2011-09-14
      • 1970-01-01
      • 2013-06-08
      • 2015-12-10
      • 1970-01-01
      • 2011-07-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多