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



我尝试在另一个托管bean中获得托管bean的实例,这要归功于BalusC post: here

使用findBean方法,这很好,我检索了我的bean,但使用ManagedProperty我无法获得我的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;
   }
}

所以当我在login bean中调用LocaleBean locale = findBean("locale");时,它是工作的,但是:

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

行不通…

com.sun.faces.mgbean。ManagedBeanCreationException: Impossible de crasser le bean gsgr«login»。所有的问题都不能解决。- La propri«locale»du bean«login»n 'existe pas.

您应该为bean编写getter/setter,并注释为@ManagedProperty

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

LocaleBean locale = (LocaleBean) FacesContext.getCurrentInstance()
                    .getExternalContext().getSessionMap().get("locale");

如果你想在你的登录bean中调用LocaleBean需要是SessionScoped或以上。

如果你想在登录Bean上调用Locale Bean,你必须执行

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

调用相应的set e get。你不需要这个

LocaleBean locale = findBean("locale");

你现在可以使用locale,因为它是本地的,就像在你的登录Bean中这样:

String s = local.getLocale(); 

相关内容

  • 没有找到相关文章

最新更新