Как получить свойство управляемого боба от другого компонента в JSF
Я искал похожие вопросы, но я немного запутался. У меня есть страница входа, так что LoginBean также, который;
@ManagedBean(name = "loginBean")
@SessionScoped
public class LoginBean implements Serializable {
private String password="";
private String image="";
@ManagedProperty(value = "#{loginBeanIdentityNr}")
private String identityNr="";
...
после успеха переходит на страницу списка заказов, поэтому у меня также есть 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);
...
}
Мне не нужен весь LoginBean, просто ManagedProperty "loginBeanIdentityNr". Но этот код ниже не работает (конечно);
identityNr = (String) FacesContext.getCurrentInstance()
.getApplication().getELResolver()
.getValue(elContext, null, "loginBeanIdentityNr");
на этот раз он возвращает мне ноль. Я думаю, что если мне понадобится целое свойство бина, я могу добавить эти бины, верно? Итак, есть ли у вас какие-либо предложения для этого подхода? Можно<f:attribute>
использоваться?
1 ответ
@ManagedProperty
объявляет место, где JSF должен установить свойство, а не то, где JSF должен "экспортировать" свойство. Вам нужно просто ввести LoginBean
как собственность OrderBean
,
public class OrderBean {
@ManagedProperty(value="#{loginBean}")
private LoginBean loginBean; // +setter
// ...
}
Таким образом, вы можете получить к нему доступ в OrderBean
просто
loginBean.getIdentityNr();
В качестве альтернативы, если вы делаете свой OrderBean
запрос или просмотр области, то вы также можете установить только identityNr
имущество.
public class OrderBean {
@ManagedProperty(value="#{loginBean.identityNr}")
private String identityNr; // +setter
// ...
}
Не имеет отношения к конкретной проблеме: инициализация String
свойства с пустой строкой - плохая практика.