@ManagedBean(名称= "foo" ) 在 EL #{foo} 中不可用



我试图在JSF2中使用应用程序作用域bean,但由于某种原因,它总是在我的请求作用域bean中null。下面是我使用的代码:

应用程序作用域bean:

@ManagedBean(eager=true, name="applicationTracking")
@ApplicationScoped
public class ApplicationTracking implements Serializable {
    private static final long serialVersionUID = 4536466449079922778L;
    public ApplicationTracking() {
        System.out.println("ApplicationTracking constructed");
    }
}

请求作用域bean:

@ManagedBean
@RequestScoped
public class SearchResults implements Serializable {    
    private static final long serialVersionUID = 4331629908101406406L;
    @ManagedProperty("#{applicationTracking}")
    private ApplicationTracking appTracking;
    public ApplicationTracking getAppTracking() {
        return appTracking;
    }
    public void setAppTracking(ApplicationTracking appTrack) {
        this.appTracking = appTrack;
    }
    @PostConstruct
    public void init() {
        System.out.println("SearchResults.init CALLED, appTracking = " + appTracking);
    }
}

根据我在论坛上看到的一切,这应该没有任何其他配置的工作。当我启动服务器(Tomcat)时,我看到ApplicationTracking构造函数和init方法被调用。

但是在我的SearchResults组件中,PostConstruct中的打印输出始终为空:

SearchResults.init CALLED, appTracking = null 

我错过了什么?

假设您从正确的包javax.faces.bean.*中导入了这些注释,那么如果您在faces-config.xml中以不同的托管bean名称重新注册相同的托管bean类,就会发生此问题。去掉faces-config.xml项。这是JSF 1。注册托管bean的样式。在JSF 2.x中不需要它。当您这样做时,它将覆盖托管bean类上任何基于注释的注册,导致它们无效。

确保您没有阅读JSF 1。在学习和使用JSF 2.x的过程中,有针对性的资源。在JSF 2.x中,许多事情的处理方式都有所不同。

相关内容

  • 没有找到相关文章

最新更新