0
我有一个带有视图范围的bean和会话范围的bean的JSF Web应用程序。我想从视图bean中修改会话bean的成员,并且我遵循了来自某个知名JSF人员的this指南,但似乎无法在没有运行时异常的情况下使其工作。受管会话bean的引用“home”在引用时为空,类似于this question,但我已经遵循接受的答案的建议。为什么引用@ManagedProperty时引发异常?
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!");
}
}
我的“家”豆的第一位如下:
@ManagedBean(name= "home")
@SessionScoped
public class CpstcHomeBean implements Serializable {
...
更新:我跟随乔丹的建议,并在我看来作用域的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 {
...
但我的“home”bean引用仍然为空。有任何想法吗?
UPDATE 2:事实证明,您必须在两个类中使用@Named,而不仅仅是注入类。我的网络应用现在加载,但一些元素是空白的。在我的控制台日志中,我看到“Target Unreachable,标识符'home'解析为null”。我在Tomcat 7上运行,如果这影响了事情。有任何想法吗?
我想弄清楚,你意思是说,写: @Named( “家”) 代替: @ManagedBean(name = “家”) ?我知道这似乎是一个基本的“RTFM”问题,但[this](http://docs.oracle.com/javaee/6/api/javax/inject/Named.html)API的用法并不那么明确在JSF中。 [这个例子]只是使用“@Named”,但我不确定在哪里定义了bean的名称,如果它不是注释的参数,并且它没有在faces-config.xml中定义。 – StockB
是的:)然后使用@Inject而不是ManagedProperty –
我似乎无法导入“命名”类。 Eclipse建议使用javax.faces.event.NamedEvent代替...尝试使用FacesContext的备用方法产生“无法解析javax.el.ELException类型,它是从所需的.class文件间接引用的。” – StockB