IDEA中使用Thymeleaf模板$表达式报错

IDEA中使用Thymeleaf模板$表达式报错

问题描述

使用SpringBoot开发项目,在html文件中使用Thymeleaf模板,需要使用表达式遍历输出数据,在IDEA中表达式出现红色波浪线报错,且表达式未生效,页面无法正常显示。


*版权声明:本文为博主原创文章,禁止转载
作者博客: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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容