2

我有一个ViewScopedbean,在这个 bean 中我正在注入一个SessionScopedbean。在这方面可以找到很多信息,并且非常简单。

会话 bean

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;

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

@ManagedBean
@SessionScoped
public class Following implements Serializable {
    private HashMap<Integer, ArrayList<String>> followingThese;

    //Constructors and getters+setters
    ...
}

看豆

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.ResourceBundle;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.component.UICommand;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

@ManagedBean
@ViewScoped
public class DisplayResults implements Serializable {

    // Following Bean
    @ManagedProperty(value = "#{following}")
    private Following followingBean;

    // other information...
    ...

    //*and this is how this injected bean is used*
    public void startStopFollowing(int id, name) {
         followingBean.startStopFollowing(id, name);  //adds this id to followingThese
    }
}

小面

...
<h:outputText value="#{displayResults.followingBean.followingThese}" id="test"/>
<h:outputText value="#{following.followingThese}" id="test2"/>

...

<h:selectBooleanCheckbox value="#{results.followed}" immediate="true" 
    valueChangeListener="#{displayResults.startStopFollowing(displayResults.id, displayResults.name)}">
     <f:ajax render=":test :test2"/>
</h:selectBooleanCheckbox>

这里有趣的是,test通过单击复选框会更新,但test2不会。会话范围的变量永远不会更新。刷新页面时,我丢失了所有信息#{displayResults.followingBean.followingThese}

编辑:会话变量不会在 ajax 调用中更新,只有“注入的会话变量”

如果我更改javax.faces.STATE_SAVING_METHODserver上面的代码有效,但是当 on 时client,什么都没有。我丢失了通过ViewScopedbean 保存的所有“会话”信息。

编辑 忘了提。在 Glassfish 3.1.2.2 上使用 JSF (Majorra) 2.1.6(刚刚更新了所有内容,希望这可以解决问题)。

编辑#2 使用上面的代码添加了完整的导入列表。

添加的信息RequestScoped在这里和那里尝试了一些东西之后,如果我将接收 bean 设置为OR ,我正在寻找的功能没有问题SessionScoped。设置为 时不起作用ViewScoped。这一切都很好而且很花哨,但是我需要视图范围内的其他功能,将我的 bean 设置为会话范围是没有意义的。

任何帮助表示赞赏。

编辑 3

这已被记录为JIRA上的错误

4

0 回答 0