【问题标题】:why NPE in this bean?为什么这个bean中有NPE?
【发布时间】:2011-05-26 12:32:14
【问题描述】:

我有一个会话 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 中使用设置器,但我不明白 为什么 mainMenuNavigationBean 在这里为空...我希望它在访问时自动创建(如果为空)创建AccountBean

    @PostConstruct
    public void init() {
        userLoginVo = new UserLoginVo();
        //NPE here
        mainMenuNavigationBean.setExternalPage(true);
    }

你能给我一个提示吗?我无法理解我做错了什么......

【问题讨论】:

  • 应该可以。您是否正在运行您认为正在运行的faces-config.xml?保存/重建/重新部署/重新启动/等。当然,还要阅读服务器日志以获取任何警告。

标签: jsf jsf-1.2


【解决方案1】:

为了让&lt;managed-property&gt; 正常工作,您需要确保要注入的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;
    }

    // ...
}

注意setter中的this,如果省略,setter无效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    相关资源
    最近更新 更多