2011-08-31 5 views
5

J'utilise JSF 1.1. J'ai ce qui suit dans mon dossier faces-config.xml:Comment obtenir le nom du bean géré depuis l'intérieur du bean backing?

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

Je veux obtenir le nom de haricot géré beanInstance1 dans mon haricot. Ceci est mon haricot:

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 
} 

Je sais comment obtenir le com.paquete.BeanMyBean littéral (this.getClass().getName()) et le BeanMyBean (this.getClass().getSimpleName()), mais je ne sais pas comment obtenir un nom géré (instance de Bean).

Comment puis-je obtenir la valeur beanInstance1?

Répondre

4

Cette information n'est pas disponible avec l'API JSF standard. Mieux ce que vous pouvez obtenir est de marcher à travers toute la demande, session et application vous oscilloscopes de la manière suivante (le code est copié à partir this blog):

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

Cependant, il y a une grande mais, cela ne fonctionne pas à l'intérieur du constructeur du bean simplement parce que JSF ne l'a pas encore placé dans une portée! Vous devez le déterminer ultérieurement, par ex. dans une méthode d'action.

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

au Unrelated problème concret, cela est une odeur de conception. L'exigence fonctionnelle concrète pour laquelle vous pensiez que c'est la solution doit certainement être résolue différemment.

+2

De rien. Puisque vous êtes nouveau ici, s'il vous plaît n'oubliez pas de marquer la réponse acceptée qui a aidé (la plupart) à résoudre le problème, voir aussi http://meta.stackexchange.com/questions/5234/how-does-accepting-an -travail/5235 # 5235 – BalusC

Questions connexes