Cómo conseguir managedbean propiedad de otro bean en JSF
-
14-11-2019 - |
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?
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.