Jsf 2 JSF应用程序范围bean不能作为ADF请求范围bean的托管属性注入

Jsf 2 JSF应用程序范围bean不能作为ADF请求范围bean的托管属性注入,jsf-2,nullpointerexception,oracle-adf,managed-bean,managed-property,Jsf 2,Nullpointerexception,Oracle Adf,Managed Bean,Managed Property,编辑:这是一个使用JSF 2.0的ADF应用程序。 我有一个应用程序范围的托管bean,我正在请求范围bean的托管属性中引用它。当试图在请求范围bean的PostConstruct方法中访问应用范围bean时,我得到了一个NullPointerException。我不确定我是否不了解应用程序范围的bean何时可用于请求范围的bean的一些基本原理,或者我只是在实现中犯了一个错误 应用范围bean: @ManagedBean(eager=true) @ApplicationScoped publ

编辑:这是一个使用JSF 2.0的ADF应用程序。

我有一个应用程序范围的托管bean,我正在请求范围bean的托管属性中引用它。当试图在请求范围bean的PostConstruct方法中访问应用范围bean时,我得到了一个NullPointerException。我不确定我是否不了解应用程序范围的bean何时可用于请求范围的bean的一些基本原理,或者我只是在实现中犯了一个错误

应用范围bean:

@ManagedBean(eager=true)
@ApplicationScoped
public class SecurityApplication {

    public String test() {
        return "test result";
    }

    @PostConstruct
    public void init() {
        System.out.println("In SecurityApplication.init");
    }
}
public class UserSecurityCompanies {
    @ManagedProperty(value="#{securityApplication}")
    private SecurityApplication securityApplication;

    @PostConstruct
    public void init() {
        System.out.println("In UserSecurityCompanies.init");
        System.out.println("SecurityApp.Test():" + getSecurityApplication().test());
    }

    public SecurityApplication getSecurityApplication() {
        return securityApplication;
    }

    public void setSecurityApplication(SecurityApplication securityApplication) {
        this.securityApplication = securityApplication;
    }
}
EDIT:在adfc-config.xml文件中将其配置为请求范围的托管bean。这似乎是个问题,因为我指定bean由ADF管理,但使用了JSF ManagedProperty注释。

请求作用域bean:

@ManagedBean(eager=true)
@ApplicationScoped
public class SecurityApplication {

    public String test() {
        return "test result";
    }

    @PostConstruct
    public void init() {
        System.out.println("In SecurityApplication.init");
    }
}
public class UserSecurityCompanies {
    @ManagedProperty(value="#{securityApplication}")
    private SecurityApplication securityApplication;

    @PostConstruct
    public void init() {
        System.out.println("In UserSecurityCompanies.init");
        System.out.println("SecurityApp.Test():" + getSecurityApplication().test());
    }

    public SecurityApplication getSecurityApplication() {
        return securityApplication;
    }

    public void setSecurityApplication(SecurityApplication securityApplication) {
        this.securityApplication = securityApplication;
    }
}
应用程序作用域bean在应用程序部署期间初始化,但在调用getSecurityApplication().test()时引发NPE


史蒂夫

你漏掉了一个模棱两可的地方。谁在管理请求范围的bean?如果不是JSF
@ManagedBean
,那么
@ManagedProperty
显然不会有任何效果。@BalusC-谢谢,我认为这就是问题所在。我使用的是ADF,它建议您在adfc-config.xml中配置bean。我在该文件中将请求范围的bean指定为托管bean,但托管属性如上所示。我更改了它,使其不注册为ADF托管bean,而是一个纯JSF托管bean,现在我不再获得NPE。听起来这解决了这个问题。但是,我发现ADF组件在这个bean中没有看到属性,这使我认为将ADF与纯JSF管理的bean混合将是一个问题。我编辑了原始帖子来说明问题所在。bean只是java类,所以不管框架如何,然而,以其他框架方式管理adf框架是一个真正的问题。你应该更多地解释你在做什么,你在努力实现什么。我认为真正的问题是,为什么在使用ADF时要使用JSF“only”托管bean而不是ADF“only”bean。