由于这个 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。
为什么请?
答案 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();