2011-08-31 15 views
5

मैं जेएसएफ 1.1 का उपयोग कर रहा हूं।बैकिंग बीन के अंदर से प्रबंधित बीन नाम कैसे प्राप्त करें?

<managed-bean> 
    <managed-bean-name>beanInstance1</managed-bean-name> 
    <managed-bean-class>com.paquete.BeanMyBean</managed-bean-class> 
    <managed-bean-scope>request</managed-bean-scope> 
</managed-bean> 

मैं अपने सेम के अंदर प्रबंधित सेम नाम beanInstance1 मिल चाहते हैं: मैं अपने faces-config.xml फ़ाइल में निम्न है। यह मेरा सेम है:

package com.paquete; 

public class BeanMyBean { 
    String atribute1; 

    public BeanMyBean() { 
     System.out.println("managed-bean-class="+this.getClass().getName()); 
     System.out.println("managed-bean-name="+????????????????????????); 
     // How Can I get the "beanInstance1" literal from here?? 
    } 

    // setters and getters 
} 

मुझे पता है कि मिल com.paquete.BeanMyBean शाब्दिक (this.getClass().getName()) और BeanMyBean (this.getClass().getSimpleName()), लेकिन मैं कैसे मिलता है एक प्रबंधित नाम (बीन के कहने) पता नहीं है।

मैं beanInstance1 मूल्य कैसे प्राप्त कर सकता हूं?

उत्तर

4

यह जानकारी मानक जेएसएफ एपीआई द्वारा उपलब्ध नहीं है। वहाँ एक बड़ा लेकिन

public static String lookupManagedBeanName(Object bean) { 
    ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext(); 
    Map<String, Object> requestMap = externalContext.getRequestMap(); 

    for (String key : requestMap.keySet()) { 
     if (bean.equals(requestMap.get(key))) { 
      return key; 
     } 
    } 

    Map<String, Object> sessionMap = externalContext.getSessionMap(); 
    for (String key : sessionMap.keySet()) { 
     if (bean.equals(sessionMap.get(key))) { 
      return key; 
     } 
    } 

    Map<String, Object> applicationMap = externalContext.getApplicationMap(); 
    for (String key : applicationMap.keySet()) { 
     if (bean.equals(applicationMap.get(key))) { 
      return key; 
     } 
    } 

    return null; 
} 

हालांकि, यह काम नहीं करता: सर्वश्रेष्ठ क्या आप प्राप्त कर सकते हैं सभी अनुरोध, सत्र के माध्यम से चलने के लिए और आवेदन अपने आप नीचे दिए तरीक़े scopes (कोड this blog से नकल किया गया है) बीन के कन्स्ट्रक्टर के अंदर बस क्योंकि जेएसएफ ने इसे अभी तक किसी भी दायरे में नहीं रखा है! आपको इसे बाद के बिंदु पर निर्धारित करने की आवश्यकता है, उदा। एक क्रिया विधि में।

public void submit() { 
    String name = lookupManagedBeanName(this); 
    // ... 
} 

असंबंधित ठोस समस्या के लिए, यह एक डिजाइन गंध है। कंक्रीट कार्यात्मक आवश्यकता जिसके लिए आपने सोचा था कि यह समाधान निश्चित रूप से हल किया जाना है।

+2

आपका स्वागत है। चूंकि आप यहां नए हैं, कृपया उत्तर को स्वीकार करने के लिए भूल जाएं, जिसने समस्या को हल करने में मदद की है (अधिकांश), http://meta.stackexchange.com/questions/5234/how-does-accepting-an -answer काम/5235 # 5235 – BalusC

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