Почему NPE в этом бобе?
У меня есть сессионный компонент:
<managed-bean>
<managed-bean-name>mainMenuNavigationBean</managed-bean-name>
<managed-bean-class>com.cloud.common.jsf.core.beans.MainMenuNavigationBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
Я вставляю это в bean-запрос:
<managed-bean>
<managed-bean-name>createAccountBean</managed-bean-name>
<managed-bean-class>com.cloud.common.jsf.account.CreateAccountBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>mainMenuNavigationBean</property-name>
<property-class>com.cloud.common.jsf.core.beans.MainMenuNavigationBean</property-class>
<value>#{mainMenuNavigationBean}</value>
</managed-property>
</managed-bean>
Теперь я пытаюсь использовать сеттер в @PostConstruct моего createAccountBean, но я не понимаю, почему mainMenuNavigationBean здесь равен нулю... Я ожидаю, что он будет создан автоматически, если равен нулю, при доступе к createAccountBean
@PostConstruct
public void init() {
userLoginVo = new UserLoginVo();
//NPE here
mainMenuNavigationBean.setExternalPage(true);
}
Можете ли вы дать мне подсказку, пожалуйста? Я не могу понять, что я делаю не так...
1 ответ
Чтобы получить <managed-property>
для правильной работы необходимо убедиться, что подлежащий инъекции компонент является public
класс с (неявным) public
конструктор по умолчанию, который не выдает никаких исключений при построении.
public class MainMenuNavigationBean {
public MainMenuNavigationBean() {
// Can even be omitted altogether if you don't have other constructors.
}
// ...
}
И вам нужно убедиться, что у акцептора есть действительное свойство и рабочий установщик для этого.
public class CreateAccountBean {
private MainMenuNavigationBean mainMenuNavigationBean;
public void setMainMenuNavigationBean(MainMenuNavigationBean mainMenuNavigationBean) {
this.mainMenuNavigationBean = mainMenuNavigationBean;
}
// ...
}
Следите за this
в установщике, если вы пропустите это, установщик не имеет никакого эффекта.