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