求助:Thymeleaf无法显示数据库中三星冰箱数量的问题排查
问题排查与解决
1. 核心拼写错误问题
你在Repository的查询语句中写的是name='Frigider',但实际能查到数据的MySQL语句用的是name='Fridge',两个单词拼写不一致,导致查询返回结果为0(或null),Thymeleaf中samsungNumber没有有效值,因此显示空括号。
修正Repository的查询语句:
@Query(value="select count(*) from products where name='Fridge' and brand='Samsung' ", nativeQuery = true) Long findNumberOfSamsungFridges();
2. 类型匹配优化
MySQL中count(*)返回的是BIGINT类型,用Integer接收可能存在隐式类型转换风险,建议将Repository方法的返回类型改为Long,同时Controller中对应变量也同步修改:
@GetMapping("/number/samsung/fridges") public ModelAndView numberOfSamsungFridges(){ ModelAndView modelAndView = new ModelAndView("products"); Long numSamsungFridges = productRepository.findNumberOfSamsungFridges(); modelAndView.addObject("samsungNumber", numSamsungFridges); // 打印日志验证查询结果,方便排查 System.out.println("查询到的三星冰箱数量:" + numSamsungFridges); return modelAndView; }
3. 确认请求路径是否正确
确保你在浏览器中访问的是/number/samsung/fridges路径来加载products页面,而非直接通过其他入口打开products页面。如果没走这个Controller方法,模型中不会注入samsungNumber变量,Thymeleaf自然显示空内容。
4. 验证Thymeleaf变量传递
可以在products页面临时添加调试代码,确认变量是否存在:
<!-- 调试用,验证后可删除 --> <p th:text="'当前samsungNumber值:' + ${samsungNumber}"></p>
如果调试内容显示变量不存在,需检查Controller类是否添加了@Controller注解、路由是否被其他配置覆盖等。
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

