我有一个ViewScoped
bean,在这个 bean 中我正在注入一个SessionScoped
bean。在这方面可以找到很多信息,并且非常简单。
会话 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_METHOD
为server
上面的代码有效,但是当 on 时client
,什么都没有。我丢失了通过ViewScoped
bean 保存的所有“会话”信息。
编辑 忘了提。在 Glassfish 3.1.2.2 上使用 JSF (Majorra) 2.1.6(刚刚更新了所有内容,希望这可以解决问题)。
编辑#2 使用上面的代码添加了完整的导入列表。
添加的信息RequestScoped
在这里和那里尝试了一些东西之后,如果我将接收 bean 设置为OR
,我正在寻找的功能没有问题SessionScoped
。设置为 时不起作用ViewScoped
。这一切都很好而且很花哨,但是我需要视图范围内的其他功能,将我的 bean 设置为会话范围是没有意义的。
任何帮助表示赞赏。
编辑 3
这已被记录为JIRA上的错误