You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

「显示已删除影片」复选框功能异常排查——视频租赁应用软删除场景下列表更新失效问题

搞定你的软删除恢复功能!

嘿,我一眼就揪出你代码里的小bug了——问题完全出在updateList()方法的逻辑上!

核心问题:重复设置网格内容覆盖了结果

看你这段代码:

private void updateList() {
    if (showDeleted.getValue() == true) {
        grid.setItems(service.findAllDeletedMovies());
    }
    grid.setItems(service.findAllMovies(filterText.getValue()));
}

哪怕showDeleted是true,你先把网格设置成已删除的电影列表,紧接着又调用了findAllMovies()把内容替换成正常电影!这不就等于白忙活了嘛,最后永远显示的都是未删除的内容。

修复方案:给逻辑加个else分支

把代码改成这样,让两种显示情况互斥:

private void updateList() {
    // 先判断复选框的值,避免空指针
    boolean shouldShowDeleted = showDeleted.getValue() != null && showDeleted.getValue();
    if (shouldShowDeleted) {
        // 显示已删除的电影
        grid.setItems(service.findAllDeletedMovies());
    } else {
        // 显示正常电影(带过滤)
        grid.setItems(service.findAllMovies(filterText.getValue()));
    }
}

我加了showDeleted.getValue() != null的判断,是因为Checkbox组件刚初始化时,值可能是null,直接判断== true会有潜在的空指针风险。

额外可以检查的点

  • 确认监听器真的触发了:可以在updateList()开头加个System.out.println("updateList called, showDeleted: " + showDeleted.getValue());,看看复选框点击时方法有没有执行。
  • 验证JPA查询是否正确:在findAllDeletedMovies()方法里加个日志,打印返回的列表大小,比如System.out.println("Found deleted movies: " + movieRepository.findAllIsDeleted().size());,排查是不是查询本身没拿到数据。
  • Spring事务与缓存:如果是Spring项目,确保你的查询方法都在事务范围内,避免JPA一级缓存导致的旧数据问题——可以给查询方法加上@Transactional(readOnly = true)注解。

对了,你说的是恢复「已删除」客户,但代码里都是Movie类,应该是笔误吧?不过这不影响核心问题的解决~

内容的提问来源于stack exchange,提问作者Soccan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 17:42:35