我搜索了类似的问题,但我有点困惑。我有一个登录页面,所以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 "loginBeanIdentityNr“。但是下面的代码不能工作(当然);
identityNr = (String) FacesContext.getCurrentInstance()
.getApplication().getELResolver()
.getValue(elContext, null, "loginBeanIdentityNr");
这一次,它向我返回null。我想如果我需要整个bean属性,我可以注入这些bean,对吧?那么,你对这种方法有什么建议吗?可以使用<f:attribute>
吗?
发布于 2011-05-15 03:30:40
@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
属性是一种糟糕的做法。
https://stackoverflow.com/questions/6004309
复制相似问题