彻底解决thymeleaf提示${xxx.xx}无法解析的问题,不用更改idea设置

前言

出现问题的时候,百度了很多,一些常见错误以及解决方法列举如下:

  1. 加注释 (本人没有测试过)
  2. idea 一直正在解析java idea无法解析方法_idea 一直正在解析java

  3. 修改idea设置
  4. idea 一直正在解析java idea无法解析方法_idea_02

  5. 实体类无getXXX()方法出错,解决办法就是实体类添加getXXX()方法
  6. 拼写错误的问题,如 xx.id 写为 xx.getId
  7. 路径错误,路径前面多写了一个 /

idea 一直正在解析java idea无法解析方法_idea 一直正在解析java_03

  1. 更换写法,本人测试可行,但写法比较复杂
  2. 书写格式错误

idea 一直正在解析java idea无法解析方法_idea 一直正在解析java_04

一、idea提示${xxx.xx} Cannot resolve的根本原因

说明:虽然idea提示无法解析,但项目都可以正常运行。项目无法正常运行导致的无法解析问题,不在本文讨论范围。

先看两个工程代码的对比:

工程一:

controller代码:

idea 一直正在解析java idea无法解析方法_intellij-idea_05


html代码:

idea 一直正在解析java idea无法解析方法_idea 一直正在解析java_06


可以看到,工程一不会提示无法解析的问题。工程二:

controller代码:

idea 一直正在解析java idea无法解析方法_spring boot_07

html代码:

idea 一直正在解析java idea无法解析方法_idea_08


两个项目都可以正常运行,maven依赖也是一样的,但工程二就是提示无法解析。

二、发现原因

html页面敲代码的时候,发现了下面的问题:

idea 一直正在解析java idea无法解析方法_idea 一直正在解析java_09

idea 一直正在解析java idea无法解析方法_idea_10


项目一,没有提示无法解析的问题 ,idea提示,user是我写的实体类类型。
项目二,提示无法解析,idea提示,brand是Object类型,不是我写的实体类。
这是因为,在使用model传数据的时候,一个是实体类类型,一个是Object类型。

项目一类型是实体类类型

idea 一直正在解析java idea无法解析方法_idea 一直正在解析java_11

项目二类型是Object类型

idea 一直正在解析java idea无法解析方法_spring boot_12

① user.id : idea在解析时,会去实体类找getId()方法,找到了,自然不会提示无法解析。
② brand.name : idea在解析时,会去Object类找getName()方法,找不到,提示无法解析。当然,项目运行时,依然调用的是实体类的getName() 方法,所以程序可以正常执行,但解析时会提示报错。idea虽然强大,但依然有不完美的地方。

三、解决问题

知道了根本原因,解决问题自然很简单了,model传数据的时候,不放Oject类型的就行了,放具体的实体类。

idea 一直正在解析java idea无法解析方法_spring boot_13


idea 一直正在解析java idea无法解析方法_idea_14


可以看到,brand.name已经不会报错了,并且,回到html页面敲代码的时候,idea会有各种提示,而category没有处理 ,依然报错。

idea 一直正在解析java idea无法解析方法_idea_15


本人测试,此方法对 List Map 无效,建议将数据封装成实体类并提供getXXX()方法,再使用model传数据。