0

我知道我可以像这样放置/获取会话范围变量。

FacesContext.getCurrentInstance().getExternalContext()
    .getSessionMap().put(SESSION_KEY_SOME, some);

那我不能像这样访问值吗?

@ManagedBean
@SessionScoped
public class SomeOtherBean {

    @ManagedProperty("#{sessionScope.some}")
    private Some some;
}

值为null

4

1 回答 1

1

@ManagedProperty在创建/实例化@ManagedBean.

因此,当在第一次设置之前@ManagedBean创建时,它仍将保留在. 仅在第一次设置创建时才有效。#{sessionScope.some}null@ManagedBean@ManagedBean#{sessionScope.some}

基本上有三种方法可以实现所需的行为。

  1. 替换private Some someexternalContext.getSessionMap().get("some")

    @ManagedBean
    @SessionScoped
    public class SomeOtherBean {
    
        public void someMethod() {
            Some some = (Some) FacesContext.getCurrentInstance()
                .getExternalContext().getSessionMap().get("some");
            // ...
        }
    
    }
    
  2. 替换@SessionScoped@RequestScoped

    @ManagedBean
    @RequestScoped
    public class SomeOtherBean {
    
        @ManagedProperty("#{sessionScope.some}")
        private Some some;
    
        // ...
    }
    
  3. externalContext.getSessionMap().put("some", some)通过直接将其设置为 bean 属性来替换。

    @ManagedBean
    public class SomeBean {
    
        @ManagedProperty("#{someOtherBean}")
        private SomeOtherBean someOtherBean;
    
        public void someMethod() {
            // ...
            someOtherBean.setSome(some);
        }
    
        // ...
    }
    

也可以看看:

于 2016-11-11T08:16:50.357 回答