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

Ale*_*iro 5 annotations jsf-2 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;
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

@ManagedBean(name="loginBean")
@SessionScoped
public class LoginBean  {
    ...
}
Run Code Online (Sandbox Code Playgroud)

现在,AFAIK的@ManagedProperty注解和设置器应该足以注入属性,或者至少此处和BalusC的博客中的其他问题建议了这一点,但仍然始终存在null

这也很有趣,并且可能与此问题有关,我收到这些类的警告,即使它们仅通过faces-config.xml或带有注解进行了注册,但它们已经被注册为托管bean 。(分别对它们进行了试验,没有任何区别。)如果它们都不存在,则警告消失,但是对c无效@ManagedProperty

WARNING: JSF1074: Managed bean named 'confListBean' has already been registered. Replacing existing managed bean class type <projectname>.web.authFilter with <projectname>.web.authFilter.
Run Code Online (Sandbox Code Playgroud)

因此,问题将是:

  • @ManagedProperty要注入我没有做的事情还需要什么?
  • 除了@notations和之外,还可以“过度注册”这些托管Bean faces-config.xml吗?是否存在收集我可以检查的托管bean的过程的跟踪?

abu*_*ose 1

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

@ManagedBean(name="loginBean", eager=true)
Run Code Online (Sandbox Code Playgroud)

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