彻底解决thymeleaf提示${xxx.xx}无法解析的问题,不用更改idea设置
前言
出现问题的时候,百度了很多,一些常见错误以及解决方法列举如下:
- 加注释 (本人没有测试过)
- 修改idea设置
- 实体类无getXXX()方法出错,解决办法就是实体类添加getXXX()方法
- 拼写错误的问题,如 xx.id 写为 xx.getId
- 路径错误,路径前面多写了一个 /
- 更换写法,本人测试可行,但写法比较复杂
- 书写格式错误
一、idea提示${xxx.xx} Cannot resolve的根本原因
说明:虽然idea提示无法解析,但项目都可以正常运行。项目无法正常运行导致的无法解析问题,不在本文讨论范围。
先看两个工程代码的对比:
工程一:
controller代码:
html代码:
可以看到,工程一不会提示无法解析的问题。工程二:
controller代码:
html代码:
两个项目都可以正常运行,maven依赖也是一样的,但工程二就是提示无法解析。
二、发现原因
html页面敲代码的时候,发现了下面的问题:
项目一,没有提示无法解析的问题 ,idea提示,user是我写的实体类类型。
项目二,提示无法解析,idea提示,brand是Object类型,不是我写的实体类。
这是因为,在使用model传数据的时候,一个是实体类类型,一个是Object类型。
项目一类型是实体类类型
项目二类型是Object类型
① user.id : idea在解析时,会去实体类找getId()方法,找到了,自然不会提示无法解析。
② brand.name : idea在解析时,会去Object类找getName()方法,找不到,提示无法解析。当然,项目运行时,依然调用的是实体类的getName() 方法,所以程序可以正常执行,但解析时会提示报错。idea虽然强大,但依然有不完美的地方。
三、解决问题
知道了根本原因,解决问题自然很简单了,model传数据的时候,不放Oject类型的就行了,放具体的实体类。
可以看到,brand.name已经不会报错了,并且,回到html页面敲代码的时候,idea会有各种提示,而category没有处理 ,依然报错。
本人测试,此方法对 List Map 无效,建议将数据封装成实体类并提供getXXX()方法,再使用model传数据。