我有一个会话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在这里是空.我希望它在访问createAccountBean时自动创建(如果为null )
@PostConstruct
public void init() {
userLoginVo = new UserLoginVo();
//NPE here
mainMenuNavigationBean.setExternalPage(true);
}能给我个提示吗?我不明白我做错了什么..。
发布于 2011-05-26 12:49:30
为了使<managed-property>正常工作,需要确保要注入的bean是一个具有(隐式) 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,如果您忽略了这一点,则设置器没有任何效果。
https://stackoverflow.com/questions/6138510
复制相似问题