2011-05-14 16 views
17

में किसी अन्य बीन से प्रबंधितबीन संपत्ति कैसे प्राप्त करें I इसी तरह के प्रश्नों की खोज की लेकिन मैं थोड़ा उलझन में हूं। मेरे पास एक लॉगिन पेज है, इसलिए लॉग इनबीन भी है;जेएसएफ

@ManagedBean(name = "loginBean") 
@SessionScoped 
public class LoginBean implements Serializable {  
    private String password=""; 
    private String image=""; 
    @ManagedProperty(value = "#{loginBeanIdentityNr}") 
    private String identityNr=""; 
... 

सफलता के बाद, ऑर्डरलिस्ट पृष्ठ पर नेविगेट करता है, इसलिए मेरे पास ऑर्डरबीन भी है।

@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"); 

इस बार यह मेरे लिए शून्य हो जाता है। मुझे लगता है कि अगर मुझे पूरी बीन संपत्ति की आवश्यकता है, तो मैं इन बीन्स इंजेक्ट कर सकता हूं, है ना? तो, क्या आपके पास इस दृष्टिकोण के लिए कोई सुझाव है? <f:attribute> का उपयोग किया जा सकता है?

उत्तर

43

@ManagedProperty उस स्थान की घोषणा करता है जहां जेएसएफ को संपत्ति सेट करनी चाहिए, जहां जेएसएफ को संपत्ति को "निर्यात" नहीं करना चाहिए। OrderBean की संपत्ति के रूप में आपको LoginBean को इंजेक्ट करने की आवश्यकता है।

public class OrderBean { 

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

    // ... 
} 

इस तरह से आप वैकल्पिक रूप से सिर्फ

loginBean.getIdentityNr(); 

द्वारा OrderBean में उस तक पहुँच सकते, यदि आप अपने OrderBean अनुरोध या दृश्य बनाने के स्कोप है, तो आप भी केवल identityNr गुण सेट कर सकते हैं।

public class OrderBean { 

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

    // ... 
} 

असंबंधित ठोस समस्या के लिए: एक खाली स्ट्रिंग के साथ आरंभ String गुण एक गरीब अभ्यास है।

+0

हाय बलुस, लेकिन इस बार ऑर्डरबीन में, मेरे पास लॉगिनबीन की अनावश्यक संपत्तियां होंगी। क्या यह कार्यक्रम के लिए ढेर का अपशिष्ट नहीं है? मुझे सिर्फ पहचान की आवश्यकता है। कैप्चा मूल्य या नाम नहीं। – asyard

+1

उह, यह सिर्फ एक संदर्भ है। यह स्मृति या कुछ में पूरे बीन की एक प्रति नहीं बनाता है। यह ** बिल्कुल उसी ** बीन को इंगित करता है जैसा आपके पास सत्र में पहले से है। जावा वस्तु उन्मुख है, प्रक्रियात्मक या कुछ नहीं। और भी, एक javabean के बजाय एक स्ट्रिंग डबल-संदर्भित संभावित रूप से अधिक महंगा है। – BalusC

+0

उत्तर के लिए धन्यवाद। जैसे ही मुझे पर्याप्त प्रतिष्ठा मिलती है, मैं आपके सभी उत्तरों को वोट दूंगा :) लेकिन, सिर्फ जिज्ञासा है, वहाँ facecontext.getblabla() .. या जेएसएफ पेज में इंजेक्शन के बिना पैरामीटर के रूप में एक और तरीका है? – asyard