Pregunta

He buscado preguntas similares pero estoy un poco confundida.Tengo una página de inicio de sesión, por lo que LoginBean también que es;

@ManagedBean(name = "loginBean")
@SessionScoped
public class LoginBean implements Serializable {    
    private String password="";
    private String image="";
    @ManagedProperty(value = "#{loginBeanIdentityNr}")
    private String identityNr="";
...

después del éxito, navega a orderlist página, así que también he OrderBean.

@ManagedBean(name = "OrderBean")
@SessionScoped
       public class OrderBean {
            List<Ordery> sdList;

            public List<Order> getSdList() {

                try {

                    String identityNr ="";
                    ELContext elContext = FacesContext.getCurrentInstance().getELContext();
                    LoginBean lBean = (LoginBean) FacesContext.getCurrentInstance().getApplication().getELResolver().getValue(elContext, null, "loginBean");
                    identityNr =lBean.getIdentityNr();
                    sdList = DatabaseUtil.getOrderByIdentityNr(identityNr);
    ...
    }

No necesito todo el LoginBean, sólo ManagedProperty "loginBeanIdentityNr".Pero este código siguiente no funciona (por supuesto);

identityNr = (String) FacesContext.getCurrentInstance()
                        .getApplication().getELResolver()
                        .getValue(elContext, null, "loginBeanIdentityNr");

esta vez se devuelve null para mí.Yo creo que si me necesitan en grano de la propiedad, puedo inyectar estos frijoles, derecho?Así que, ¿tienes alguna sugerencia para este enfoque?puede<f:attribute> se pueden utilizar?

¿Fue útil?

Solución

El @ManagedProperty declara la ubicación donde JSF debe establecer la propiedad, no se donde JSF debe "exportación" de la propiedad.Usted necesita inyectar el LoginBean como propiedad de OrderBean.

public class OrderBean {

    @ManagedProperty(value="#{loginBean}")
    private LoginBean loginBean; // +setter

    // ...
}

De esta manera usted puede acceder a ella en el OrderBean por sólo

loginBean.getIdentityNr();

Alternativamente, si usted hace su OrderBean solicitud o ámbito de vista, entonces usted también puede establecer sólo el identityNr de la propiedad.

public class OrderBean {

    @ManagedProperty(value="#{loginBean.identityNr}")
    private String identityNr; // +setter

    // ...
}

No relacionados para el problema concreto:inicializar String propiedades con una cadena vacía es una mala práctica.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top