2

私にはViewScoped豆があり、この豆に豆を注入していSessionScopedます。これには多くの情報があり、非常に簡単です。

セッション 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すると動作しますが、 onの場合は何もありません。Beanを介して保存されたすべての「セッション」情報が失われます。serverclientViewScoped

編集 言及するのを忘れました。Glassfish 3.1.2.2 で JSF (Majorra) 2.1.6 を使用する (これで問題が解決することを期待して、すべてを更新しました)。

編集 #2 上記のコードを使用してインポートの完全なリストを追加しました。

追加情報RequestScopedあちこちでいくつかのことを試した後、受信 Bean をOR に設定すると、探している機能は問題なく動作しSessionScopedます。に設定すると動作しませんViewScoped。これはすべて素晴らしいことですが、ビュー スコープから必要な他の機能が必要であり、Bean をセッション スコープに設定する意味がありません。

どんな助けでも大歓迎です。

編集 3

これはJIRAのバグとして記録されています

4

0 に答える 0