2011-08-31 21 views
5

JSF 1.1 kullanıyorum.Fasulye ismini nasıl desteklenir?

<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> 

benim fasulye içine yönetilen fasulye adını beanInstance1 olsun istiyorum: Benim faces-config.xml dosyasında aşağıdaki var. Bu benim fasulye: Ben olsun biliyorum

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()) ve BeanMyBean (this.getClass().getSimpleName()) literal, ama Yönetilen Ad (Bean örneği) almak nasıl bilmiyorum.

beanInstance1 değerini nasıl alabilirim?

cevap

4

Bu bilgi standart JSF API tarafından sağlanmamaktadır. Bu işe yaramazsa, büyük ama var, Ancak

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; 
} 

: En neyi alabileceğin her türlü istek, oturuma yürümeye ve uygulama (kod this blog kopyalanır) kendinize şu şekilde kapsamları fasulyenin yapıcısı içinde sadece JSF henüz herhangi bir alana yerleştirmediği için! Daha sonra, örn. Bir eylem yönteminde.

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

İlgisiz, bu bir tasarım kokusudur. Bunun çözüm olduğunu düşündüğünüz somut fonksiyonel gereksinim kesinlikle farklı şekilde çözülmelidir.

+2

Bir şey değil. Burada yeni olduğunuzdan, sorunu çözmede yardımcı olan (çoğu) sorunun cevabını lütfen unutmayın. Ayrıca bkz. Http://meta.stackexchange.com/questions/5234/how-does-accepting-an -Cevap ver-iş/# 5235 5235 – BalusC