我正在使用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条件:
if(dataList==null){
//logic here
flag=false;
}
但是只针对time time,它会转到上面提到的if(…)条件,之后即使我刷新页面,它也会转到其他if(…)存在
if(dataList!=null && flag){
//Logic here
}
如何修改条件,每次当我刷新页面时,它必须先去if(..)条件,基本上对象值即使在页面加载时也不会变为空。在声明时,我初始化所有对象为null。我需要关闭浏览器或删除缓存,使控制进入其他if(dataList!=零,,国旗)条件。
修改如下
@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(){
..
}
}
问题仍然没有解决。当我刷新页面时,数据列表应该变为空,但它持有以前的值。请建议。谢谢。
问题是您的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...
}
更多信息:
- 如何选择合适的bean scope?
- 为什么JSF多次调用getter
不是答案的一部分,但由于您使用的是JSF 2和PrimeFaces 4,因此应该停止使用JSP作为视图技术,而转向Facelets。