5

一句话:@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或使用注释注册。(分别尝试了它们的展位,没有区别。)如果它们都不存在,则警告消失,但@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除了and之外,还有什么可能“过度注册”这些托管 bean faces-config.xml?是否有收集我可以检查的托管 bean 的过程的跟踪?
4

1 回答 1

1

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

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

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

于 2014-02-10T19:23:05.430 回答