Spring Boot结合Thymeleaf如何统计表行数并在下拉表单生成对应数字选项
Spring Boot + Thymeleaf 实现动态下拉选项解决方案
步骤1:Controller层构造可选数值列表
你需要在返回表单页面的Controller接口中,调用已写好的行数统计方法,生成1到总行数的连续整数集合,存入Model传给前端模板:
@Controller public class MenuController { // 注入你写好的MenuService @Autowired private MenuService menuService; // 对应返回你输入表单页面的接口 @GetMapping("/menu/form") public String showMenuForm(Model model) { // 调用统计方法获取总行数 long totalCount = menuService.getCountOfEntities(); // 生成1到totalCount的连续整数集合,默认菜单行数不会超过int最大值,普通业务场景完全够用 List<Integer> numOptions = IntStream.rangeClosed(1, (int) totalCount) .boxed() .collect(Collectors.toList()); // 将集合存入Model,供Thymeleaf读取 model.addAttribute("numOptions", numOptions); return "你的表单页面路径,例如menu/form"; } }
Spring Boot 2.x+版本无需额外导包,会自动引入java.util.stream下的相关工具类。
步骤2:Thymeleaf模板渲染下拉框
在你的表单页面的下拉框位置,用Thymeleaf的遍历语法渲染所有选项即可:
<select name="你下拉框对应的字段名"> <!-- 可选:添加默认提示项 --> <option value="" selected disabled>请选择序号</option> <!-- 遍历Controller传过来的集合生成选项 --> <option th:each="num : ${numOptions}" th:value="${num}" th:text="${num}"> </option> </select>
如果Menu表行数为0,下拉框只会显示默认提示项,不会出现空遍历异常。
可选优化点
- 如果菜单数据变动频率很低,可以给
getCountOfEntities方法添加Spring Cache缓存,减少数据库查询次数:首先在启动类加@EnableCaching注解,然后在方法上加@Cacheable(value = "menuCount", key = "'all'")即可,新增/删除/修改Menu数据时主动清空该缓存即可。 - 若确实存在行数超过int最大值的极端场景,把集合类型改为
List<Long>,对应调整遍历逻辑即可。
内容的提问来源于stack exchange,提问作者Tigray
相关产品推荐
相关产品推荐

