我有一个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
...
}
查看Bean
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
}
}
的facelet
...
<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
,则上述代码有效,但在client
时,则无效。我丢失了通过ViewScoped
bean保存的所有“会话”信息。
修改 的 忘了提。在Glassfish 3.1.2.2上使用JSF(Majorra)2.1.6(只是更新了所有可能解决问题的方法)。
编辑#2 添加了以上代码的完整导入列表。
添加信息
在这里和那里尝试了一些事情之后,如果我将接收bean设置为RequestScoped
OR SessionScoped
,我正在寻找的功能没有问题。设置为ViewScoped
时,它不起作用。这将是很好的和花花公子,但我需要从视图范围我需要的其他功能,这将我的bean设置为会话范围是没有意义的。
感谢任何帮助。
这已被记录为JIRA
上的错误