बिंदु एलेक्स बनाने के लिए कोशिश कर रहा है कि आप कक्षाएं भ्रमित कर रहे हैं है उदाहरण के साथ। यह एक क्लासिक (पन इरादा) ओओपी गलती है।
@ManagedBean एनोटेशन कक्षाओं पर कक्षाओं पर काम नहीं करता है। यह उदाहरणों पर पर काम करता है, जो प्रबंधित होने वाले एक उदाहरण को परिभाषित करता है।
अपने सेम इस तरह परिभाषित किया गया है:
@ManagedBean
@SessionScoped
public class MyBean implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
}
तो यह मतलब है कि आप एक सत्र-दायरे वाले उदाहरण, myBean कहा जाता है (या जो भी आप इसे नाम करना चाहते हैं)।
इसलिए, सभी वर्ग जो MyBean वर्ग के उप-वर्ग हैं डिफ़ॉल्ट रूप से प्रबंधित नहीं होते हैं। इसके अलावा, जेएसएफ कैसे पहचानता है कि आप सबक्लास का उपयोग कर रहे हैं? यदि हां, तो आप उन उदाहरणों को क्या नाम दे रहे हैं? (क्योंकि आप उन्हें कुछ नाम देने के लिए है, अन्यथा, उन्हें कैसे प्रबंधित JSF हैं?)
तो, मान लीजिए कि आप किसी अन्य वर्ग डालते हैं:
Class MyOtherClass {
private MyBean myBeanObject; // myBeanObject isn't managed.
}
क्या @PostConstruct और सभी अन्य एनोटेशन के लिए होता आपने इस्तेमाल किया? कुछ भी तो नहीं। यदि आपने MyBean का उदाहरण बनाया है, तो यह आप है जो इसे प्रबंधित करता है, जावासेवरफेस नहीं। तो यह वास्तव में एक प्रबंधित बीन नहीं है, केवल एक सामान्य वस्तु जिसका आप उपयोग करते हैं।
हालांकि, चीजों को पूरी तरह से बदल जब आप ऐसा करते हैं:
@ManagedBean
@SessionScoped
Class MyOtherClassBean {
@ManagedProperty("#{myBean}")
private MyBean myBeanObject;
public void setMyBeanObject(...) { ... }
public MyBeanClass getMyBeanObject() { ... }
}
फिर, क्या किया जाता है नहीं वर्ग है, लेकिन उदाहरण वर्ग की। एक प्रबंधित बीन होने का मतलब है कि आपके पास केवल उस बीन का एक उदाहरण है (प्रति गुंजाइश, वह है)।
ऐसा करके, मुझे अपने सभी बीन्स पर @ManagedBean डालना होगा ... यही वह है जिसे मैं टालना चाहता हूं! – Stephan
@ स्टीफन: आप अपने सभी प्रबंधित बीन पर एनोटेशन डालने से क्यों बचते हैं? मुझे नहीं पता कि आपने अपने 'बेसबीन' के अंदर क्या रखा है, लेकिन जिस तरह से आप इसे नाम देते हैं, यह सभी प्रबंधित बीन के बीच समानता का सेट होना चाहिए, इसलिए आपको इसे @ManagedBean को एनोटेट नहीं करना चाहिए क्योंकि यह वास्तव में एक नियंत्रक/गेटवे नहीं है आपका 'मॉडल'। आपके पास 'बेसबीन' को 'सत्र स्कोप्ड' होना है, इसलिए 'बेसबीन' से प्रत्येक बीन का उत्तराधिकारी सत्र होगा जिसे आप चाहते हैं या नहीं। आप सत्र में बहुत सी चीजें नहीं रखना चाहते हैं। क्या होगा यदि आप एक प्रबंधित बीन बनाना चाहते हैं जिसमें RequestScoped है और 'बेसबीन' का उत्तराधिकारी है। –
अधिक स्पष्ट होने के लिए: क्या @ManagedBean का उत्तराधिकारी होना संभव है? – Stephan