我有一个会话bean:
<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>
现在,我正在尝试在我的createAccountBean的@PostConstruct中使用setter,但我不明白为什么mainMenuNavigationBean为null 这里......我希望在访问时如果为null则自动处理createAccountBean
@PostConstruct
public void init() {
userLoginVo = new UserLoginVo();
//NPE here
mainMenuNavigationBean.setExternalPage(true);
}
你可以给我一个提示吗?我无法理解我做错了什么......
答案 0 :(得分:0)
为了使<managed-property>
正常工作,您需要确保要注入的bean是public
类,其中包含一个(隐式)public
默认构造函数在施工时不会抛出任何异常。
public class MainMenuNavigationBean {
public MainMenuNavigationBean() {
// Can even be omitted altogether if you don't have other constructors.
}
// ...
}
你需要确保接受者有一个有效的属性和一个工作的setter。
public class CreateAccountBean {
private MainMenuNavigationBean mainMenuNavigationBean;
public void setMainMenuNavigationBean(MainMenuNavigationBean mainMenuNavigationBean) {
this.mainMenuNavigationBean = mainMenuNavigationBean;
}
// ...
}
注意setter中的this
,如果省略,则setter无效。