2012-03-29 17 views
18

मैं @ManagedProperty से निपटने की कोशिश कर रहा हूं लेकिन सफलता के बिना!सीडीआई में प्रबंधित पाइपर्टी @ नामांकित बीन रिटर्न शून्य

मैं this मार्गदर्शिका का पालन कर रहा हूं, और यह मुश्किल नहीं लगता है। लेकिन मेरा कोड बस काम नहीं करेगा!

यह एक छोटा सा टुकड़ा

@ManagedBean 
@SessionScoped 
public class LoginBean { 

@EJB 
private LoginUserLocal loginUser; 
private boolean loggedIn = false; 
private User user; 
private StreamedContent image; 
. 
. 
. 
//-- 
@Named(value = "messagesBean") 
@RequestScoped 
public class MessagesBean { 

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

public LoginBean getLoginBean() { 
    return loginBean; 
} 

public void setLoginBean(LoginBean loginBean) { 
    this.loginBean = loginBean; 
} 

public String getUser() { 
    System.err.println(loginBean == null); 
    return loginBean.getUser().getUsername(); 
} 

इस कोड को कह रही है कि loginBean रिक्त है मुझे एक NullPointerException देता है, है!

कोई सुझाव?

+0

करता @EJB एनोटेशन स्वचालित रूप से सेम इंजेक्षन, या आप उन्हें कैसे इंजेक्षन LoginBean लिए करते हैं के लिए के लिए javax.faces.bean.SessionScoped? –

उत्तर

36

आप सीडीआई बीन्स के साथ जेएसएफ प्रबंधित बीन्स मिश्रण कर रहे हैं। आपका लॉगिनबैन एक जेएसएफ प्रबंधित बीन है (इसमें @ManagedBean एनोटेशन है)। आपका संदेशबीन एक सीडीआई बीन है (इसमें @Named एनोटेशन है)। यदि आपने संदेश बीन को जेएसएफ प्रबंधित बीन में बदल दिया है (@Named को @ManagedBean के साथ बदलना) तो समस्या हल होनी चाहिए (इसे दो सीडीआई बीन्स के साथ भी काम करना चाहिए)। > CDI @Named (काम)

CDI @Named - -> JSF @ManagedBean (केवल काम करता है

CDI @Named:

यहाँ कैसे इंजेक्शन दोनों सेम प्रकार के बीच काम करता है का एक संक्षिप्त अवलोकन है यदि इंजेक्शन सेम की गुंजाइश व्यापक है)

JSF @ManagedBean -> JSF @ManagedBean (केवल तभी कारगर साबित इंजेक्शन सेम की गुंजाइश है व्यापक)

JSF @ManagedBean -> CDI @Named (काम नहीं करेगा)

लेकिन दायरे आयात कक्षाओं का ख्याल रखना। बीन प्रकार के आधार पर @SessionScoped और @RequestScoped के लिए अलग-अलग कक्षाएं हैं।

@ManagedBeans

javax.enterprise.context.SessionScoped CDI @Named सेम

+0

ग्रेट, धन्यवाद! मैंने पहले ही '@ नामांकित 'को' @ प्रबंधित बीन 'के साथ बदलने की कोशिश की है, लेकिन मेरे पास गलत @ @ RequestScoped' एनोटेशन आयात था, इसलिए यह काम नहीं किया! – StepTNT

+0

यह सुनकर अच्छा लगा कि यह काम करता है। –

+0

दूसरी तरफ क्यों नहीं जाते? सीडीआई प्रबंधित सेम अधिक लचीलापन प्रदान करते हैं और आपके जेएसएफ प्रबंधित बीन कर सकते हैं सब कुछ कर सकते हैं। Http://stackoverflow.com/questions/4347374/jsf-backing-beans-managedbean-or-cdi-beans-name – JanM

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