Как получить свойство managedbean от другого компонента в JSF

17

Я искал похожие вопросы, но я немного смущен. У меня есть страница входа, поэтому 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");

на этот раз он возвращает null для меня. Я думаю, если мне понадобится целое боба, я могу ввести эти бобы, верно? Итак, есть ли у вас какие-либо предложения по этому подходу? можно использовать <f:attribute> ?

    
задан asyard 14.05.2011 в 21:29
источник

1 ответ

42

@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 свойств с пустой строкой является плохой практикой.

    
ответ дан BalusC 14.05.2011 в 21:30
источник