@ManagedProperty注释返回null而不是注入属性

时间:2013-10-24 22:04:53

标签: jsf-2 annotations managed-bean

在一句话中:@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注入我不做的事情还需要什么?
  • 除了@notationsfaces-config.xml之外,还有什么可以“覆盖”这些托管bean?是否有收集我可以检查的托管bean的过程的跟踪?

1 个答案:

答案 0 :(得分:3)

定义loginBean时,请确保将eager标志设置为true。

@ManagedBean(name="loginBean", eager=true)

这将确保创建loginBean,即使它未从GUI元素引用。