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

如何通过HTML和Thymeleaf过滤Spring Boot接口返回的数据且不发起新请求?

实现方案

完全可行,不需要二次调用后端接口,仅通过前端缓存全量数据集 + DataTable 自定义过滤规则即可实现需求。

实现思路

  • 首次页面加载时,把后端返回的全量数据集缓存到前端JS变量中,无需依赖后续后端接口调用
  • 给切换按钮绑定点击事件,触发时修改全局过滤标记
  • 调用DataTable提供的自定义过滤API,基于行原始数据中attributeIWantToFilterOn属性值匹配过滤条件,重新渲染表格即可

完整代码示例

页面HTML部分

<!-- 过滤切换按钮 -->
<button id="filterToggleBtn" style="margin-bottom: 10px;">仅展示RIGHT类型数据</button>

<!-- DataTable表格结构 -->
<table id="myTable" class="display" width="100%">
  <thead>
    <tr>
      <th>对象ID</th>
      <th>对象名称</th>
      <!-- 如果不需要展示过滤属性,可删除下面这一列,不影响过滤逻辑 -->
      <th>属性类型</th>
    </tr>
  </thead>
</table>

JS逻辑部分

// 1. 缓存全量数据:如果是Thymeleaf服务端渲染,直接从模型注入数据
const fullData = /*[[${后端返回的列表模型变量名}]]*/ [];
// 如果是前端异步请求接口拿数据,直接把接口返回的全量数组赋值给fullData即可

// 2. 全局过滤标记,默认展示全部数据
let showOnlyRight = false;

// 3. 初始化DataTable
const dataTable = $('#myTable').DataTable({
  data: fullData,
  columns: [
    { data: 'objectId' },
    { data: 'objectName' },
    { data: 'attributeIWantToFilterOn' }
  ]
});

// 4. 注册DataTable全局自定义过滤规则
$.fn.dataTable.ext.search.push(
  function(settings, searchData, index, rowData) {
    // 未开启过滤时直接返回全部数据
    if (!showOnlyRight) return true;
    // 开启过滤后仅返回属性为RIGHT的行
    return rowData.attributeIWantToFilterOn === 'RIGHT';
  }
);

// 5. 绑定切换按钮点击事件
$('#filterToggleBtn').click(function() {
  // 切换过滤状态
  showOnlyRight = !showOnlyRight;
  // 切换按钮文案提示
  $(this).text(showOnlyRight ? '展示全部数据' : '仅展示RIGHT类型数据');
  // 触发表格重绘,自动应用过滤规则
  dataTable.draw();
});

注意事项

  • 该方案仅适合全量数据量不大的场景(单页数据小于1万条),如果数据量过大,前端渲染会有性能问题,此时还是建议走后端分页+过滤逻辑
  • 过滤属性不需要在表格中展示也可以正常工作,直接删除columns配置中对应的列即可,过滤逻辑会直接读取行原始数据,不受展示列影响

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:54:03