JSF

2011-05-14 29 views
17

içinde başka bir fasulyeden managebean özellik nasıl elde edilir Benzer sorular aradım ama biraz kafam karıştı. Giriş sayfam var, bu yüzden LoginBean da; Başarılı olduktan sonra, sipariş listesi sayfasına gider, bu yüzden de OrderBean'ım var.JSF

@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); 
    ... 
    } 

Ben, sadece ManagedProperty "loginBeanIdentityNr" Bütün LoginBean gerekmez. Ancak aşağıdaki kod çalışmıyor (elbette); bu kez bana null değerini döndürür. Eğer bütün fasulyeye ihtiyaç duyarsam, bu fasulyeleri enjekte edebilirim, değil mi? Yani, bu yaklaşım için herhangi bir öneriniz var mı? <f:attribute> kullanılabilir mi?

cevap

43

@ManagedProperty, JSF'nin özelliği ayarlaması gereken yeri bildirir, JSF'nin özelliği "dışa aktarması" gereken yeri değil. LoginBean ürününü OrderBean numaralı ürüne eklemeniz yeterlidir. Eğer OrderBean istek veya görünümü yaparsanız, Alternatif sadece

loginBean.getIdentityNr(); 

tarafından OrderBean yılında erişebilirsiniz

public class OrderBean { 

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

    // ... 
} 

Bu şekilde o zaman da sadece identityNr özelliğini ayarlayabilirsiniz, kapsamlı. Beton sorununa

public class OrderBean { 

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

    // ... 
} 

İlgisiz: Boş bir dize ile String özelliklerini başlatılıyor fakir bir uygulamadır.

+0

merhaba BalusC, ama bu sefer OrderBean'da, loginbean'ın gereksiz özelliklerine sahip olacağım. program için yığın israfı değil mi? sadece kimlik numarasına ihtiyacım var. captcha değeri veya adı değil. – asyard

+1

Uh, bu sadece bir referans. Bütün fasulyenin bir kopyasını hafızada ya da bir şeyde yapmaz. Zaten oturumda olduğu gibi ** aynı ** fasulye işaret eder. Java nesne yönelimli, prosedürel veya bir şey değil. Daha da önemlisi, bir dize yerine bir dize çift referans verme potansiyel olarak daha pahalıdır. – BalusC

+0

Cevabınız için teşekkürler. Ben yeterince itibar almak en kısa sürede tüm cevapları oy verecek :) Ama, sadece meraklı, facescontext.getblabla() gibi başka bir yol var mı? Veya jsf sayfa enjekte olmadan parametre olarak? – asyard