我知道我可以像这样放置/获取会话范围变量。
FacesContext.getCurrentInstance().getExternalContext()
.getSessionMap().put(SESSION_KEY_SOME, some);
然后我不能像这样访问这个值吗?
@ManagedBean
@SessionScoped
public class SomeOtherBean {
@ManagedProperty("#{sessionScope.some}")
private Some some;
}
值为null
。
答案 0 :(得分:1)
@ManagedProperty
在创建/实例化@ManagedBean
期间运行。
因此,如果在之前创建了@ManagedBean
,则#{sessionScope.some}
首次设置,那么null
仍将保留@ManagedBean
@ManagedBean
}。只有在第一次设置#{sessionScope.some}
之后创建private Some some
时,它才会有效。
基本上有三种方法可以达到预期的行为。
将externalContext.getSessionMap().get("some")
替换为@ManagedBean
@SessionScoped
public class SomeOtherBean {
public void someMethod() {
Some some = (Some) FacesContext.getCurrentInstance()
.getExternalContext().getSessionMap().get("some");
// ...
}
}
。
@SessionScoped
将@RequestScoped
替换为@ManagedBean
@RequestScoped
public class SomeOtherBean {
@ManagedProperty("#{sessionScope.some}")
private Some some;
// ...
}
。
externalContext.getSessionMap().put("some", some)
通过直接将其设置为bean属性来替换@ManagedBean
public class SomeBean {
@ManagedProperty("#{someOtherBean}")
private SomeOtherBean someOtherBean;
public void someMethod() {
// ...
someOtherBean.setSome(some);
}
// ...
}
。
xcdatamodel