在另一个托管bean中获取托管bean引用

Oli*_* J. 5 jsf managed java-ee jsf-2

由于这个BalusC帖子,我尝试在另一个托管bean中获取托管bean的实例:这里

使用findBean方法,它很棒,我检索我的bean,但ManagedProperty我无法得到我的bean.

我要注入的bean是这个:

@ManagedBean(name="locale")
@SessionScoped
public class LocaleBean {

   private String locale;

   public String getLocale() {              
        return locale;
   }

   public void setLocale(String locale) {
        FacesContext.getCurrentInstance().getViewRoot().setLocale(new Locale(locale));      
        this.locale = locale;
   }

}
Run Code Online (Sandbox Code Playgroud)

所以,当我打电话给LocaleBean locale = findBean("locale");我的loginbean时,它的工作原理是:

@ManagedProperty("#{locale}") // OR localeBean, LocaleBean...
private LocaleBean locale;
Run Code Online (Sandbox Code Playgroud)

不起作用......

com.sun.faces.mgbean.ManagedBeanCreationException:Impossibledecréerlebeangéré«login».Lesproplèmessuivantsontétédétectés: - Lapropriété«locale»dubeangéré«login»n'existe pas.

告诉我为什么 ?

Don*_*gyi 2

我看到你的 LocaleBean 是会话范围的。您可以使用 servlet 上下文的 getSessionMap 方法直接从代码中引用另一个会话范围的托管 Bean,而不是 @ManagedProperty 注释和 getter/setter:

LocaleBean locale = (LocaleBean) FacesContext.getCurrentInstance()
                    .getExternalContext().getSessionMap().get("locale");
Run Code Online (Sandbox Code Playgroud)