我正在尝试在JSF2中使用应用程序范围的bean,但是由于某种原因,它始终null
在我的请求范围的bean中。这是我正在使用的代码:
该应用程序范围的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
始终为null:
SearchResults.init CALLED, appTracking = null
我想念什么?
如果您从正确的包中导入了这些批注javax.faces.bean.*
,那么如果您在faces-config.xml
不同的托管Bean名称上重新注册了完全相同的托管Bean类,则会发生此问题。摆脱该faces-config.xml
条目。这就是注册托管Bean的JSF 1.x样式。在JSF 2.x中,您不需要它。无论如何,当这样做时,它将覆盖托管bean类上任何基于注释的注册,从而导致它们无效。
确保在学习和使用JSF 2.x时不要阅读针对JSF 1.x的资源。在JSF 2.x中,许多事情以不同的方式完成。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句