在一句话中:@ManagedProperty
注释确实返回null
而不是注入属性。
细节:有两个类:
@ManagedBean(name="authFilter")
@SessionScoped
public class AuthFilter implements Filter {
@ManagedProperty("#{loginBean}")
private LoginBean loginBean;
public void setLoginBean(LoginBean loginBean) {
this.loginBean = loginBean;
}
...
}
和
@ManagedBean(name="loginBean")
@SessionScoped
public class LoginBean {
...
}
现在,AFAIK的@ManagedProperty
注释和设置器应该足以注入属性,或至少其他问题在这里,BalusC的博客建议这样做,但它仍然始终是null
这也很有趣,可能与这个问题有关,我得到这些类的警告,他们已经注册为托管bean,即使它们只是通过faces-config.xml
注册或者annotataions。 (
分别试试了他们的摊位,没有区别。)如果他们都没有,那么警告就会消失,但@ManagedProperty
不起作用。
WARNING: JSF1074: Managed bean named 'confListBean' has already been registered. Replacing existing managed bean class type <projectname>.web.authFilter with <projectname>.web.authFilter.
所以问题是:
@ManagedProperty
注入我不做的事情还需要什么?@notations
和faces-config.xml
之外,还有什么可以“覆盖”这些托管bean?是否有收集我可以检查的托管bean的过程的跟踪?答案 0 :(得分:3)
定义loginBean时,请确保将eager标志设置为true。
@ManagedBean(name="loginBean", eager=true)
这将确保创建loginBean,即使它未从GUI元素引用。