2011-08-31 19 views
5

私はJSF 1.1を使用しています。私は私の豆内部で管理Bean名beanInstance1を取得したいバッキングBean内部からマネージドBean名を取得する方法は?

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

:私は私のfaces-config.xmlファイルに次のようしています。これは私のBeanです:私が得る方法を知っている

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.BeanMyBeanthis.getClass().getName())とBeanMyBeanthis.getClass().getSimpleName())リテラルが、私はマネージド名(Beanのインスタンス)を取得する方法がわかりません。

beanInstance1の値を取得するにはどうすればよいですか?

答えて

4

この情報は、標準のJSF APIでは使用できません。

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

しかし、大きなしかしがあります、これは動作しません:何を得ることができることは、すべてのリクエスト、セッションおよびアプリケーションを介して歩いている自分自身(コードがthis blogからコピーされた)次のようにスコープベストBeanのコンストラクタ内では、JSFがまだそれをどのスコープにも配置していないためです。あなたは後でそれを判断する必要があります。アクションメソッドで。具体的な問題へ

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

無関係、これは設計上の香りです。これが解決策だと思った具体的な機能要件は、間違いなく解決されています。

+2

大歓迎です。あなたがここでは新しいので、(ほとんど)問題を解決するのに役立った答えをマークすることを忘れないでください。http://meta.stackexchange.com/questions/5234/how-does-accepting-anも参照してください。 -answer-work/5235#5235 – BalusC

関連する問題