17
我搜索了类似的问题,但我有点困惑。我有一个登录页面,所以LoginBean也是这样;如何从JSF中的另一个bean获取managedbean属性
@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>
吗?
嗨BalusC,但这次在OrderBean中,我会有不必要的loginbean属性。这不是浪费堆的程序吗?我只需要身份证号码。不是验证码值或名称。 – asyard 2011-05-14 19:35:39
呃,它只是一个参考。它不会在内存或其他东西中创建整个bean的副本。它指向**完全相同的** bean,就像你已经在会话中一样。 Java是面向对象的,而不是程序性的或其他的东西。更重要的是,双引用String而不是javabean可能会更昂贵。 – BalusC 2011-05-14 19:37:37
感谢您的回答。只要我有足够的声望,我会投你所有的回复:)但是,只是好奇,是否有另一种方式,像facescontext.getblabla()..或在jsf页面作为参数没有注入? – asyard 2011-05-14 19:41:26