2017-01-14 4 views
0

私はWebアプリケーションを作成しており、JSF 2.0と休止状態3.5を使用しています。私の問題は、注入されていないBeanを注入したいときです。第二のクラスは、休止状態のためのインターセプタクラスですJSF @ManagedPropertyが注入されていません

@ManagedBean(name="triggerBean") 
@SessionScoped 
public class Trigger extends EmptyInterceptor { 

    @ManagedProperty(value="#{permissionBean}") 
    public PermissionBean pb; 
    public void onDelete(..) { 
     pb.test(); 
    } 
    public void setPb(PermissionBean pb) { 
     System.out.println("______setting bean"); 
     this.pb = pb; 
    } 
} 

:この中へ

@ManagedBean(name="permissionBean", eager = true) 
@SessionScoped 
public class PermissionBean { 
    private List<Role> rolesList; 
    public PermissionBean(){ 
     refresh(); 
    } 

    private void refresh(){ 
     rolesList = Role.queryRolesList(); 
    } 
    public void test(){ 
     System.out.println("__________TEST "); 
    } 
//getter setter for the rolesList 
} 

これは私が注入したいクラス(私は唯一の重要な部分をコピーした)です。プログラムが起動して動作しているので、PermissionBeanが作成されていると確信しています。その中にメソッドを使用していますので、リストが表示されています。しかし、私はそれを削除しようとすると、onDelete()関数のトリガは、私はpb.test()を呼び出す行()でnullポインタの例外を得た。いくつかの試行の後、私はテストをsetterに書き出しますが、そのメソッドは呼び出されません。

答えて

0

私はeager=trueが問題だと思います。 'Eager true'は、アプリケーションスコープのBeanでのみ意味があります。セッションスコープBeanでどのような効果があるのか​​分かりません。そのために設計されていません。しかし、あなたの説明からは、アプリケーションを起動するときに1つのオブジェクトが作成されているが、このオブジェクトがアクセスしようとしているBeanのオブジェクトと同じセッションコンテキストにないという効果があるようです。 PermissionBeanがxhtmlページから参照されていない限り、Triggerクラス内のmanagedPropertyはnullのままです。

関連する問題