在视图中注入的会话Scoped Bean复制了Scoped bean

时间:2012-09-20 13:12:21

标签: ajax jsf session jsf-2 view-scope

我有一个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设置为会话范围是没有意义的。

感谢任何帮助。

编辑3

这已被记录为JIRA

上的错误

0 个答案:

没有答案