JSF2 中的 ViewScoped 无法通过 ManagedProperty 访问 SessionScoped bean

4

我有一个奇怪的问题。据我所知,我可以将一个SessionScoped bean注入到ViewScoped中,因为它比另一个范围更广。这是我的代码:

@ManagedBean
@ViewScoped
public class ProjectBean implements Serializable {

@ManagedProperty(value="#{projectCurrentBean}")
private ProjectCurrentBean currentBean;

public void setCurrentBean(ProjectCurrentBean currentBean) {
    this.currentBean = currentBean;
}     

@ManagedProperty(value="#{userCredentialsBean}")
private UserCredentialsBean activeUser;

public void setActiveUser(UserCredentialsBean activeUser) {
    this.activeUser = activeUser;
}

这里讲解的是2个托管的bean:

@ManagedBean
@SessionScoped
public class ProjectCurrentBean implements Serializable  {

并且

@ManagedBean
@SessionScoped
public class UserCredentialsBean  implements Serializable {

使用UserCredentialsBean时一切正常,但当我使用ProjectCurrentBean时失败了:

Unable to create managed bean projectBean. The following problems were found: - The scope of the object referenced by expression #{projectCurrentBean}, request, is shorter   than the referring managed beans (projectBean) scope of view

为什么? :)
1个回答

11
您没有使用来自 javax.faces.bean 包中的@SessionScoped 来声明 bean,而是使用了来自javax.enterprise.context 包中的该注解。这与来自 javax.faces.bean 包中的 @ManagedBean 不兼容。此时该 bean 将默认为请求作用域并像@RequestScoped一样运行。

请修正您的导入。

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean
@SessionScoped
public class ProjectCurrentBean implements Serializable {

4
IDE自动完成功能要小心。 - BalusC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接