2011-05-23 15 views
6

से एप्लिकेशन स्कोप बीन एक्सेस करना मैं जेएसएफ 2.0 का उपयोग कर रहा हूं और मेरे पास दो बीन नेविगेशन (एप्लिकेशन स्कोप) और मॉड्यूल (अनुरोध स्कोप) है। मैं मॉड्यूल बीन में नेविगेशन बीन के तरीकों का उपयोग करना चाहता हूं। मैं इस तरह से में कर रहा हूँ मॉड्यूल बीनजेएसएफ 2.0 किसी अन्य बीन

@ManagedProperty(value = "#{navigationBean}") 
    private NavigationBean navigationBean; 

में लेकिन जब मैंने उसे नेविगेशन सेम के रूप में काम नहीं कर रहा navigationBean.SomeMethod पाने के लिए कोशिश कर रहा हूँ रिक्त है। यह कैसे करना है?

उत्तर

19

दोनों सेम एक fullworthy @ManagedBean होने की जरूरत है का पालन करने के लिए है। इंजेक्शन बीन के लिए स्वीकार्य के पास सार्वजनिक सेटटर विधि होनी चाहिए। इंजेक्शन बीन केवल @PostConstruct और उससे परे (यानी सभी सामान्य घटना विधियों में उपलब्ध है, लेकिन इस प्रकार स्वीकार्य के निर्माता में नहीं है)।

तो, यह काम करने के लिए चाहिए:

@ManagedBean 
@ApplicationScoped 
public class Navigation { 
    // ... 
} 

@ManagedBean 
@RequestScoped 
public class Module { 

    @ManagedProperty(value="#{navigation}") 
    private Navigation navigation; 

    @PostConstruct 
    public void init() { 
     navigation.doSomething(); 
    } 

    public void setNavigation(Navigation navigation) { 
     this.navigation = navigation; 
    } 

} 
4

मुझे लगता है कि @ManagedProperty को काम करने के लिए एक सार्वजनिक सेट विधि की आवश्यकता है।

1

मैं समाधान

मैं आवेदन हस्ताक्षर बूलियन getReadAccess में एक विधि है (स्ट्रिंग भूमिका, स्ट्रिंग मॉड्यूल) मिला है। मैं एक और सेम में उपयोग करना चाहते हैं तो मैं इन चरणों का

`javax.el.MethodExpression readAccess; 
    javax.el.ELContext elContext = null; 
    javax.faces.context.FacesContext context = FacesContext.getCurrentInstance(); 
    elContext = ((FacesContext) context).getELContext(); 
    javax.faces.application.Application application = FacesContext.getCurrentInstance().getApplication(); 
    javax.el.ExpressionFactory expressionFactory = application.getExpressionFactory(); 
    readAccess = expressionFactory.createMethodExpression(elContext, 
      "#{navigationBean.getReadAccess}", Void.class, new Class[] { 
        String.class, String.class }); 

    //--------Call---------------------------- 
    return (Boolean) readAccess.invoke(elContext, new Object[] { 
       "roleName", "moduleName" }); 

`

+3

यह एक समाधान नहीं है। यह एक कामकाज/हैक है। – BalusC

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