5

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

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

}

因此,当我调用LocaleBean locale = findBean("locale");我的loginbean 时,它是有效的,但是:

@ManagedProperty("#{locale}") // OR localeBean, LocaleBean...
private LocaleBean locale;

不工作...

com.sun.faces.mgbean.ManagedBeanCreationException:不可能 de créer le bean géré «登录»。Les problèmes suivants ont été détectés : - La propriété «locale» du bean géré «login» n'existe pas。

告诉我为什么 ?

4

3 回答 3

4

您应该为带有 @ManagedProperty 注释的 bean 编写 getter/setter

于 2013-03-02T18:59:01.010 回答
2

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

LocaleBean locale = (LocaleBean) FacesContext.getCurrentInstance()
                    .getExternalContext().getSessionMap().get("locale");
于 2012-12-27T16:08:04.540 回答
0

如果你想在你的登录 bean 中调用 LocaleBean 需要是 SessionScoped 或更高版本。

如果你想在 Login Bean 上调用 Locale Bean,你必须这样做

@ManagedProperty("#{locale}")
private LocaleBean locale;

为此调用适当的 set e get 。你不需要这个

LocaleBean locale = findBean("locale");

您可以使用 now 语言环境,因为它在您的登录 Bean 中是本地的:

String s = local.getLocale(); 
于 2014-05-03T21:45:37.067 回答