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 给我。我想如果我需要整个 bean 属性,我可以注入这些 bean,对吗?那么,您对这种方法有什么建议吗?可以<f:attribute>用吗?

4

1 回答 1

44

声明 JSF 应该设置属性的@ManagedProperty位置,而不是 JSF 应该“导出”属性的位置。您只需要注入LoginBeanas 的属性OrderBean

public class OrderBean {

    @ManagedProperty(value="#{loginBean}")
    private LoginBean loginBean; // +setter

    // ...
}

这样你就可以在OrderBeanby中访问它

loginBean.getIdentityNr();

或者,如果您提出您的OrderBean请求或视图范围,那么您也可以只设置identityNr属性。

public class OrderBean {

    @ManagedProperty(value="#{loginBean.identityNr}")
    private String identityNr; // +setter

    // ...
}

与具体问题无关String:用空字符串初始化属性是一种不好的做法。

于 2011-05-14T19:30:39.810 回答