2011-08-06 10 views
6

ऐसा लगता है कि @ApplicationScoped बीन्स केवल ईएल का उपयोग कर किसी पृष्ठ में पहुंचने पर पहली बार शुरू किए जाते हैं।जेएसएफ 2 एप्लीकेशनस्कोप बीन तत्काल समय?

जब मैं ApplicationMap पर क्वेरी करता हूं, तो @ApplicationScoped बीन बनाया जाएगा?

ExternalContext ec = currentInstance.getExternalContext(); result = 
    ec.getApplicationMap().get(beanName); 

एक्सएचटीएमएल पेज लोड होने से पहले मैं एप्लिकेशन स्कॉप्ड बीन की तत्कालता को कैसे ट्रिगर कर सकता हूं?

उत्तर

9

@ManagedBean घोषणा में आप eager=true का उपयोग कर सकते हैं।

@ManagedBean(eager=true) 
@ApplicationScoped 
public class Config { 

    // ... 

} 

इस तरह सेम वेब ऐप्लिकेशन की स्टार्टअप पर autocreated किया जाएगा।

इसके बजाए, आप प्रोग्रामिंग के मूल्यांकन के लिए Application#evaluateExpressionGet() का भी उपयोग कर सकते हैं और यदि आवश्यक हो तो बीन को स्वतः बनाएं। this answer पर भी उदाहरण देखें।

FacesContext context = FacesContext.getCurrentInstance(); 
Confic config = (Config) context.getApplication().evaluateExpressionGet(context, "#{config}", Config.class); 
// ... 

आप, साथ ही सेम जहां आपको उसकी आवश्यकता के @ManagedProperty के रूप में यह इंजेक्षन सकता है।

@ManagedBean 
@RequestScoped 
public class Register { 

    @ManagedProperty("#{config}") 
    private Config config; 

    @PostConstruct 
    public void init() { 
     // ... 
    } 

    // ... 
} 

जेएसएफ माता-पिता बीन में इंजेक्शन से पहले इसे स्वतः बना देगा। यह @PostConstruct से परे सभी विधियों में उपलब्ध है।

संबंधित मुद्दे