我正在使用java和PrimeFaces开发一个应用程序。下面是我写的java代码:
class ShowRecordsManagedBean{
private List<RecordDTO> recordInfoList = null;
...
..
public List<RecordDTO> getRecordList() {
boolean flag=true;
try {
if(dataList==null){
//logic here
flag=false;
}
if(dataList!=null && flag){
//Logic here
}
} catch (Exception e) {
}
return dataList;
}
问题是当每次控件必须按下面的条件加载时,如果条件:
if(dataList==null){
//logic here
flag=false;
}
但只是在时间上,它会进入上面提到的if(..)条件,后来即使我刷新页面,也会转到其他if(..)条件。
if(dataList!=null && flag){
//Logic here
}
如何修改条件,每当我刷新页面时它必须先去if(..)条件,基本上即使页面加载,对象值也不会变为null。我初始化所有对象为null同时宣布。我需要关闭浏览器或删除缓存以使控制进入其他if(dataList!= null&amp;&amp; flag)条件。
修改如下:
@ManagedBean
@ViewScoped
public class ShowRecordsManagedBean {
//fields declaration
private List<RecordsDTO> recordInfoList = null;
@PostConstruct
public void init() {
recordInfoList = null;
}
//getters, setters and other methods...
public List<RecordDTO> getRecordList(){
..
}
}
还有问题尚未解决。当我刷新页面时,dataList应该变为null,但是它保持之前的值。 请建议。 感谢。
答案 0 :(得分:0)
问题是您的bean被创建为@RequestScoped
,因此将在每次请求时重新创建它。为了延长寿命,您应该至少将范围扩大到@ViewScoped
。这样,bean将在客户端处于同一视图时生存,在同一视图中处理ajax请求时非常有用。
此外,您应该从字段的getter / setter中删除任何业务逻辑,因为视图(JSP或Facelets)可能会多次调用getter。您应该使用@PostConstruct
带注释的方法为您的bean加载任何初始数据。
你的bean应该是这样的:
@ManagedBean
@ViewScoped
public class ShowRecords {
//fields declaration
@PostConstruct
public void init() {
//initialize your fields here
//logifc to initialize dataList goes here
}
//getters, setters and other methods...
}
更多信息:
不是答案的一部分,但由于您使用的是JSF 2和PrimeFaces 4,因此应该停止使用JSP 作为您的视图技术并转移到Facelets。