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

时间:2014-05-15 16:20:44

标签: java jsp jsf primefaces

我正在使用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,但是它保持之前的值。 请建议。 感谢。

1 个答案:

答案 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