我有一个带有视图范围 bean 和会话范围 bean 的 JSF Web 应用程序。我想从视图 bean 修改会话 bean 的成员,并且我遵循了某个知名 JSF 人员的这个指南,但如果没有运行时异常,我似乎无法让它工作。对托管会话 bean 的引用,“home”在引用时为空,类似于这个问题,除了我已经遵循了接受答案的建议。
package brian.canadaShipping;
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
@ManagedBean(name= "requestBean")
@ViewScoped
public class CpstcRequestBean implements Serializable {
@ManagedProperty(value="#{home}")
private CpstcHomeBean homeBean;
public CpstcHomeBean getHomeBean() {
return homeBean;
}
public void setHomeBean(CpstcHomeBean homeBean) {
this.homeBean = homeBean;
}
private static final long serialVersionUID = -5066913533772933899L;
public String testVar = "hello world";
private boolean displayOutput = false;
public boolean isDisplayOutput() {
return displayOutput;
}
public void setDisplayOutput(boolean displayOutput) {
this.displayOutput = displayOutput;
}
public String getTestVar() {
return testVar;
}
public void setTestVar(String testVar) {
this.testVar = testVar;
}
public CpstcRequestBean()
{
System.out.println("TEST: " + homeBean.toString());
System.out.println("Hello, ResuestBean!");
}
}
我的“home”bean 的第一部分如下:
@ManagedBean(name= "home")
@SessionScoped
public class CpstcHomeBean implements Serializable {
...
更新:我遵循了 Jordan 的建议,并且在我的视图范围 bean 中有以下内容:
@ManagedBean(name= "requestBean")
@ViewScoped
public class CpstcRequestBean implements Serializable {
@Inject @Named("home") CpstcHomeBean homeBean;
public CpstcHomeBean getHomeBean() {
return homeBean;
}
public void setHomeBean(CpstcHomeBean homeBean) {
this.homeBean = homeBean;
}
public CpstcRequestBean()
{
System.out.println("TEST: " + homeBean.toString());
System.out.println("Hello, ResuestBean!");
}
...
以及我的会话范围 bean 中的这个:
@Named("home")
@SessionScoped
public class CpstcHomeBean implements Serializable {
...
但我的“家”bean 引用仍然为空。有任何想法吗?
更新2:事实证明,您必须在两个类中都使用@Named,而不仅仅是注入的类。我的网络应用程序现在加载,但有些元素是空白的。在我的控制台日志中,我看到“目标无法访问,标识符‘home’解析为空。” 我在 Tomcat 7 上运行,如果这会影响事情的话。有任何想法吗?