在页面刷新时重新创建数据



我正在使用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。

相关内容

  • 没有找到相关文章