繁体   English   中英

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

[英]How to get managedbean property from another bean in 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");

这次它向我返回null。 我认为如果需要整个bean属性,可以注入这些bean,对吗? 那么,您对此方法有什么建议吗? 可以使用<f:attribute>吗?

@ManagedProperty声明JSF应该设置属性的位置,而不是JSF应该“导出”该属性的位置。 您只需要将LoginBean作为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属性是一种不好的做法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM