#jsf #jsf-1.2
Вопрос:
У меня сеанс боб:
<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>
Я вставляю это в компонент запроса:
<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 здесь равен нулю… Я ожидаю, что он будет автоматически создан, если значение равно null, при доступе к createAccountBean
@PostConstruct
public void init() {
userLoginVo = new UserLoginVo();
//NPE here
mainMenuNavigationBean.setExternalPage(true);
}
Не могли бы вы дать мне подсказку, пожалуйста? Я не могу понять, что я делаю не так…
Комментарии:
1. Должно сработать. Ты бежишь так
faces-config.xml
, как думаешь, что бежишь? Сохранить/перестроить/повторно развернуть/перезапустить/и т.д. Также прочитайте журналы сервера для любых предупреждений, чтобы быть уверенным.
Ответ №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
, что в сеттере, если вы опустите это, сеттер не будет иметь никакого эффекта.