私には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を介して保存されたすべての「セッション」情報が失われます。server
client
ViewScoped
編集 言及するのを忘れました。Glassfish 3.1.2.2 で JSF (Majorra) 2.1.6 を使用する (これで問題が解決することを期待して、すべてを更新しました)。
編集 #2 上記のコードを使用してインポートの完全なリストを追加しました。
追加情報RequestScoped
あちこちでいくつかのことを試した後、受信 Bean をOR
に設定すると、探している機能は問題なく動作しSessionScoped
ます。に設定すると動作しませんViewScoped
。これはすべて素晴らしいことですが、ビュー スコープから必要な他の機能が必要であり、Bean をセッション スコープに設定する意味がありません。
どんな助けでも大歓迎です。
編集 3
これはJIRAのバグとして記録されています