2012-12-27 63 views
4

我试图让管理bean实例,在另一个托管bean感谢这个BalusC后:here获取其他托管bean托管bean参考

随着findBean方法,它的伟大,我找回我的豆,但有ManagedProperty我无法得到我的豆。

我的豆注入是这个:

@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豆称之为LocaleBean locale = findBean("locale");它的工作,但:

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

不工作...

com.sun.faces.mgbean.ManagedBeanCreationException:Impossible decréerle beangéré«login»。 Lesproblèmessuivants ontétédétectés: - Lapropriété«locale»du beangéré«登录»n'existe pas。

为什么要这样?

+0

是不是因为我的'locale'豆可能没有bean之前被实例化'登录'豆...? –

+1

我不太了解法语,但是您是否为此属性创建了getter和setter? – partlov

+1

我刚看到这篇文章:http://stackoverflow.com/questions/5165567/how-to-inject-entire-managed-bean-via-managedproperty-annotation。这确实是一个getter/setter问题。谢谢partlov –

回答

2

我看到你的LocaleBean是会话作用域。 相反,@ManagedProperty注释和getter/setter方法,你可以参考另一个会话范围直接从代码中使用servlet上下文的getSessionMap方法管理的bean:

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

你应该写为豆的getter/setter其中注释@ManagedProperty

0

如果你想调用Login bean中的LocaleBean需要SessionScoped或更高版本。

如果你想调用语言环境豆上登录豆u必须做

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

调用相应的集合E得到了点。 你不需要这个

LocaleBean locale = findBean("locale"); 

你可以用现在的语言环境,因为它是在你登录的Bean当地像这样:

String s = local.getLocale();