【问题标题】:Data is recreated on page refresh数据在页面刷新时重新创建
【发布时间】:2014-07-04 05:23:15
【问题描述】:

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

但仅在时间上,它会转到上面提到的 if(..) 条件,稍后即使我刷新页面,它也会转到其他 if(..) 存在。

if(dataList!=null && flag){
            //Logic here
        } 

如何修改条件,每次刷新页面时都必须进入第一个 if(..) 条件,基本上即使页面加载,对象值也不会变为 null。我最初将所有对象初始化为 null在声明的同时。我需要关闭浏览器或删除缓存以使控件进入其他 if(dataList!=null && 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 应该变为空,但它保持以前的值。 请建议。 谢谢。

【问题讨论】:

  • 你也在使用 JSF 吗?哪个版本?
  • @Luiggi Mendoza - 是 Primefaces4 和 JSF2。
  • 这也是你的问题吗? stackoverflow.com/questions/23682105/…
  • @Mark Robinson - 是的,我已经删除了那个帖子。

标签: java jsp jsf primefaces


【解决方案1】:

问题是您的 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

【讨论】:

  • 感谢您的帮助。但是,当我将 ManagedBean 中的范围修改为您提到的 ViewScoped 时,它会抛出错误“ViewScoped 无法解析为类型”。
  • @user3633028 你添加了必要的导入吗?您是否也在使用其他库?
  • 谢谢,我忘记导入库了。我会尝试更新你。
  • @user3633028 如果这篇文章解决了你的问题,别忘了mark it as the answer
  • 我的问题还没有解决。每当我刷新页面时,控件都会转到 if(dataList!=null && flag)。我按照你的建议添加了。请参阅上面帖子中的修改代码。
猜你喜欢
  • 2015-11-27
  • 1970-01-01
  • 2013-01-31
  • 2020-06-17
  • 1970-01-01
  • 2022-11-14
  • 2014-07-24
  • 2021-12-23
  • 1970-01-01
相关资源
最近更新 更多