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

时间:2012-12-27 15:10:14

标签: jsf java-ee jsf-2 managed

由于这个 BalusC 帖子,我尝试在另一个托管bean中获取托管bean的实例: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;
   }

}

因此,当我在LocaleBean locale = findBean("locale"); bean中调用login时,它可以正常工作,但是:

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

不起作用......

  

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

为什么请?

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

如果您想在Login bean中调用LocaleBean,则需要使用SessionScoped或更高版本。

如果要在登录Bean上调用Locale Bean,则必须执行

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

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

LocaleBean locale = findBean("locale");

您可以在Login Bean中使用now locale,因为它是本地的:

String s = local.getLocale();