2017-01-14 4 views
0

Я пишу веб-приложение, и я использую JSF 2.0 и hibernate 3.5. Моя проблема заключается в том, что я хотел бы добавить компонент, который он не вводит.JSF @ManagedProperty не вводится

Это класс я хотел бы внедрить (я скопировал только важные детали):

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

В это:

@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; 
    } 
} 

Второй класс является классом перехватчик для спящего режима. Программа запускается и работает, я уверен, что PermissionBean создается, потому что я использую в нем методы, я вижу список. Но когда я пытаюсь удалить из него, и триггеры функции onDelete(), я получил исключение нулевого указателя (на этой строке, где я вызываю pb.test()). После некоторых попыток я поставил тестовую запись в сеттер, но этот метод никогда не вызывается.

ответ

0

Я думаю, что проблема eager=true. «Eager true» имеет смысл только в компоненте, включенном в приложение, я не знаю, какое влияние он оказывает на сессионный компонент, поскольку он не был предназначен для этого. Но из вашего описания кажется, что при запуске приложения создается один объект, но этот объект не находится в том же контексте сеанса, что и этот объект из компонента Trigger, из которого вы пытаетесь получить к нему доступ. Пока ссылка на PermissionBean не указана ни с одной страницы xhtml, управляемый объект внутри класса Trigger останется null.

Смежные вопросы