IDEA中使用Thymeleaf模板$表达式报错
问题描述
使用SpringBoot开发项目,在html文件中使用Thymeleaf模板,需要使用表达式出现红色波浪线报错,且表达式未生效,页面无法正常显示。
*版权声明:本文为博主原创文章,禁止转载
作者博客:codesong.cn
created: 2019-11-18 *
采用Spring MVC设计,controller层和HTML文件部分代码如下:
controller层代码:
@Controller
public class HomeController {
@Autowired
...
@RequestMapping(path = "/index", method = RequestMethod.GET)
public String getIndexPage(Model model) {
List<DiscussPost> list = discussPostService.findDiscussPosts(0,0,10);
List<Map<String, Object>> discussPosts = new ArrayList<>();
if(list != null) {
for (DiscussPost post: list) {
Map<String, Object> map = new HashMap<>();
map.put("post", post); //装入帖子
User user = userService.findUserById(post.getUserId());
map.put("user", user); //装入用户
discussPosts.add(map);
}
}
model.addAttribute("discussPosts", discussPosts); //填充对象
return "/index";
}
}
代码最后部分,在model中填充一个集合对象discussPosts
HTML代码:
Thymeleaf模板$表达式报错
多处$表达式报错,且编译运行后,网页不能显示内容,模板解析发生错误。
问题分析
虽然在后端的model中填充了对象的数据信息,但是程序并没有运行,因此,前端HTML文件无法感知到填充的model对象(鼠标放在红色波浪线处会提醒Cannot resolve...)。IDEA默认要对Thymeleaf的数据进行验证,所以会出现报错。
因此我们只需将IDEA的Thymeleaf数据验证关闭即可。
解决方法
关闭IDEA的Thymeleaf表达式数据验证(Expression variables validation)
关闭Thymeleaf表达式数据验证
此时再查看HTML代码中的Themeleaf表达式,发现不在报错,运行程序可以查看到正确的网页,问题解决。
除此方法以外,还可以通过压缩HTML中文件的警告、对报错单独注解等方法解决此问题,不过这两种方法都有一定的局限性,且操作麻烦,本文不再介绍。另外两种方法参考链接:https://blog.csdn.net/niuniu1994/article/details/83245743