0

I have this 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

}

The Usuario class:

public class Usuario {

public Usuario() {
}

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

And I want to get the value of the property idPlanta from the SessionScoped bean (LoginBean) here (in the constructor) see the comments:

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

}

But when I show the value in the view it shows the value that really is in the Session idPlanta = 1. I dont understand why I cant get the value of that property in the constructor of that ViewScoped bean (PrincipalBean). I show the value in the view here(I know I can get it directly fron the LoginBean but this is just to show that the property login in PrincipalBean has the Session value):

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

The value of idPlanta in PrincipalBean is very important because I use it as a method parameter to show more info when the view is showed.

Please help me. I still learning JSF.

BalusC
  • 1,082,665
  • 372
  • 3,610
  • 3,555
Kaz Miller
  • 949
  • 3
  • 22
  • 40

1 Answers1

1

You need to be using these values after the bean has been constructed. When your constructor is called, your bean has net yet been initialzed - therefore the injections have not yet happend. Using the @PostConstruct method you will be able to access the desired values from the injected objects.

For example :

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

See Also

Community
  • 1
  • 1
blo0p3r
  • 6,790
  • 8
  • 49
  • 68