如何从JSF中的另一个bean获取Managedbean属性?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (37)

我搜索了类似的问题,但我有点困惑。我有一个登录页面,所以LoginBean也是;

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

成功后,导航到Orderlist页面,所以我也有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“loginBeanIdghtyNr”。但是下面的代码不起作用;

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

这一次,它向我返回NULL。那么,你对这种方法有什么建议吗?利用<f:attribute>

提问于
用户回答回答于

@ManagedProperty声明JSF地方应设置属性的位置,不要在那里JSF应该“出口”的属性。你需要注入LoginBeanas的属性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

    // ...
}

扫码关注云+社区