5

一言で言えば、プロパティを注入する代わりに@ManagedPropertyアノテーションが返されるということです。null

詳細: 2 つのクラスがあります。

@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  {
    ...
}

さて、知る限り、@ManagedPropertyアノテーションとセッターは、プロパティを注入するのに十分なはずです。または、少なくともここの他の質問とBalusCのブログはこれを示唆していますが、それでも常に残りnullます.

また興味深いことに、おそらくこの問題に関連しています。これらのクラスは、faces-config.xmlまたは アノテーションを使用してのみ登録されているにもかかわらず、すでにマネージド Bean として登録されているという警告が表示されます。(個別にブースで試してみましたが、違いはありません。) それらのいずれも存在しない場合、警告は消えますが、@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および以外に、これらのマネージド Bean を「過剰登録」できる可能性があるものは何faces-config.xmlですか? 確認できるマネージド Bean を収集するプロセスのトレースはありますか?
4

1 に答える 1

1

loginBean を定義するときは、eager フラグを true に設定してください。

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

これにより、GUI 要素から参照されていない場合でも、loginBean が確実に作成されます。

于 2014-02-10T19:23:05.430 に答える