我有以下SessionScoped bean: 如您所见,我初始化了一些稍后将需要的页面加载变量。
@ManagedBean
@SessionScoped
/*
* CassandraBean is the backing bean for holding and managing information that is specific to each user session.
*/
public class CassandraBean implements Serializable {
private static final long serialVersionUID = 3542953038465572524L;
private ResultSet rs;
private HashMap<String, TInfo> tur;
private ArrayList<ErrorInfo> errors;
private ArrayList<String> selected;
private String selectedErrCode="114";
private LocalDate endDate=LocalDate.now();
private LocalDate startDate=LocalDate.of(endDate.getYear()-4, endDate.getMonthValue(), endDate.getDayOfMonth());
private CassandraManager cm;
/*
* Creates a new instance of this bean, connects to the server and loads up data
* Also starts a timer to refresh the data every 10 minutes.
*/
public CassandraBean() {
cm=new CassandraManager("192.168.129.136", "keyspacename");
createData();
selected=new ArrayList<String>();
selected.add("B01");
Timer timer = new Timer();
//queries the DB every 10 mins
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
createData();
}
}, 10*60*1000, 10*60*1000);
}
调用构造函数后,一切都很好。在调试器中检查时,所有变量都有值。
但是当我使用另一个bean中的方法导航到另一个页面时,所选的变量和selectedErrCode会丢失它们的值。它们未设置为null,但selectedErrCode变为空字符串,并且选中它将变为空ArrayList。
这个问题是我需要保留那些值,因为这样会调用以下方法。
public ArrayList<ErrorInfo> getErrors(){
getErrorData(selected, selectedErrCode, startDate, endDate);
return errors;
}
此方法由我的xhtml页面中的数据表调用以填充表格。 加载页面后,用户可以使用onpage输入表单进行查询,并且将从输入表单中选择所选的,选定的ErrCode,startDate和endDate。
如果有帮助,我会使用JBoss 6.3 EAP。