gpt4 book ai didi

jsf - @ManagedBean(name ="foo") 在 EL #{foo} 中无法通过其名称获得

转载 作者:行者123 更新时间:2023-11-28 23:31:09 26 4
gpt4 key购买 nike

我正在尝试在 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 中重新注册完全相同的托管 bean 类,就会发生此问题- config.xml 在不同的托管 bean 名称上。删除 faces-config.xml 条目。这是注册托管 bean 的 JSF 1.x 风格。在 JSF 2.x 中不需要它。无论如何,当您这样做时,它将覆盖托管 bean 类上任何基于注解的注册,导致它们无效。

确保您在学习和使用 JSF 2.x 时没有阅读针对 JSF 1.x 的资源。许多事情在 JSF 2.x 中以不同的方式完成。

关于jsf - @ManagedBean(name ="foo") 在 EL #{foo} 中无法通过其名称获得,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30289486/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com