Thymeleaf 模板无法评估与模型相关的表达式

Posted

技术标签:

【中文标题】Thymeleaf 模板无法评估与模型相关的表达式【英文标题】:Thymleaf template is not able to evaluate expression related to model 【发布时间】:2019-11-30 20:53:52 【问题描述】:

我正在开发我的第一个 Spring Boot 应用程序。它使用 MVC 模式和 Thymleaf 来呈现 html。我有一个显示模型变量的简单 HTML 模板。不幸的是,我在访问该特定映射/url时遇到了以下错误:

出现意外错误(类型=内部服务器错误,状态=500)。 评估 SpringEL 表达式的异常:“employee.Lastname”(模板:“Employees” - 第 22 行,第 8 列)

我不知道是什么问题。

我使用的是 thymleaf 3.0.11,Spring boot 2.1.2

我检查了以下内容:

    我达到了预期的模板(我已经运行了具有静态内容的相同模板) 我也尝试过显示除姓氏之外的其他变量,它正在工作 NO 值为 null 或为空

我的员工模型类如下(没有getter-setter):

public class Employee 
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long employeeId;
    private String name;
    private int salary;
    private String Lastname;

    @ManyToMany(cascade =  CascadeType.MERGE, CascadeType.REFRESH )
    @JoinTable(name = "Project_Employee", joinColumns = @JoinColumn(name = "employeeId"), inverseJoinColumns = @JoinColumn(name = "projectId"))
    private Set<Project> projects = new HashSet<Project>();

    public Employee() 
        super();
    

我的 HTML 模板如下:

<!DOCTYPE html>
<html lang="en" xmlns:th= "http://www.thymeleaf.org">
<head>
     <meta charset= "UTF-8"/>
     <title>Employee View</title>
</head>


<body>
        <h1>WELCOME</h1>
<table>     
        <tr >

            <th>First Name        </th>
            <th>Last Name         </th> 
            <th>Salary            </th>
        </tr>

        <tr th:each = "employee: $Employee">
            <td th:text ="$employee.name"></td> 
            <td th:text ="$employee.salary"></td>
            <td th:text ="$employee.Lastname"></td>

        </tr> 

</table>        
</body>
</html>

和控制器ID如下(只是那个特定的方法):

@RequestMapping("/Employees")
    public String getEmployee(Model model)
    

        model.addAttribute("Employee", employeeRepository.findAll());
        return "Employees";

    

【问题讨论】:

【参考方案1】:

很可能找不到你的 getter 方法,因为你的字段名是大写的。

尝试在您的课程中将其更改为 private String lastname;,并在您的模板中更改为 $employee.lastname

来自第 8.8 节,推断名称的大写,在JavaBeans Specification:

Java 程序员习惯于让普通标识符以小写字母开头。审稿人的积极反馈使我们相信,我们应该遵循同样的属性和事件名称的常规规则。

【讨论】:

@NilKulkarni 我添加了指向 JavaBeans 规范中相关文本的引用。很高兴它有帮助。 @NilKulkarni 如果我的回答有效,并且我的编辑回答了您的进一步问题,那么接受它怎么样? 感谢 Chris 的回答,它不仅解决了问题,还帮助我了解了根本原因。 @NilKulkarni 那么请接受答案。我很高兴这很有帮助。谢谢。

以上是关于Thymeleaf 模板无法评估与模型相关的表达式的主要内容,如果未能解决你的问题,请参考以下文章

Thymeleaf模板引擎与springboot关联后,在html中无法使用el表达式获取model存的值

评估 SpringEL 表达式的 Spring Boot 异常

无法从 Thymeleaf 中的模型对象设置默认 CSS 变量

Spring Boot + Thymeleaf css 不适用于模板

Spring Security - Thymeleaf - 我可以在 sec:authorize 标签中评估 SPEL 表达式吗?

使用片段时 Intellij 无法正确识别 Thymeleaf 模型变量