2011-08-31 14 views
5

Sto usando JSF 1.1. Ho il seguente nel mio file faces-config.xml:Come ottenere il nome del bean gestito dall'interno del bean di supporto?

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

voglio ottenere il nome bean gestito beanInstance1 dentro la mia fagioli. Questo è il mio fagiolo:

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 
} 

So come ottenere il com.paquete.BeanMyBean letterale (this.getClass().getName()) e il BeanMyBean (this.getClass().getSimpleName()), ma io non so come ottenere un nome Managed (istanza del Bean).

Come posso ottenere il valore beanInstance1?

risposta

4

Queste informazioni non sono disponibili dall'API JSF standard. Meglio ciò che si può ottenere è a piedi attraverso tutta la richiesta, sessione e applicazione ambiti te stesso modo seguente (codice viene copiato da 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; 
} 

Tuttavia, c'è una grande ma, questo non funziona all'interno del costruttore del bean semplicemente perché JSF non l'ha ancora inserito in alcun ambito! È necessario determinarlo in un momento successivo, ad es. in un metodo di azione.

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

Estranei al problema concreto, questo è un odore di progettazione. Il requisito funzionale concreto per cui hai pensato che questa è la soluzione deve essere risolto in modo diverso.

+2

Prego. Dato che sei nuovo qui, ti preghiamo di non dimenticare di contrassegnare la risposta accettata che ha aiutato (la maggior parte) a risolvere il problema, vedi anche http://meta.stackexchange.com/questions/5234/how-does-accepting-an -answer-lavoro/5235 # 5235 – BalusC

Problemi correlati