【问题标题】:Calling method A is forbidden for type B in Thymeleaf expressionsThymeleaf 表达式中的类型 B 禁止调用方法 A
【发布时间】:2022-12-31 21:58:48
【问题描述】:

我刚刚将 Web 项目升级到 Spring 6、Spring Boot 3 GA,现在我处理以下 Thymeleaf 不兼容问题。我正在生成表单选择。

<select class="form-select" th:field="*{bankAccountId}" th:classappend="${#fields.hasErrors('bankAccountId')} ? 'is-invalid'">
   <option value="" th:text="#{SelectBankAccount}">SELECT_BANK_ACCOUNT</option>
   <option th:each="bankAccount : ${bankAccounts}" th:value="${bankAccount.getId()}" th:text="${bankAccount.getName()}" th:selected="${bankAccount.getId().equals(bankAccountId)}">BANK_ACCOUNT_NAME</option>
</select>

th:selected 中的表达式失败,出现以下异常。

org.springframework.expression.EvaluationException: Calling method 'equals' is forbidden for type 'class java.util.UUID' in Thymeleaf expressions. Blocked classes are: [com.sun.*, jakarta.*, java.*, javax.*, jdk.*, org.ietf.jgss.*, org.omg.*, org.w3c.dom.*, org.xml.sax.*, sun.*]. Allowed classes are: [java.lang.Boolean, java.lang.Byte, java.lang.Character, java.lang.Double, java.lang.Enum, java.lang.Float, java.lang.Integer, java.lang.Iterable, java.lang.Long, java.lang.Math, java.lang.Number, java.lang.Short, java.lang.String, java.math.BigDecimal, java.math.BigInteger, java.math.RoundingMode, java.time.*, java.util.ArrayList, java.util.Calendar, java.util.Calendar, java.util.Collection, java.util.Date, java.util.Enumeration, java.util.HashMap, java.util.HashSet, java.util.Iterator, java.util.LinkedHashMap, java.util.LinkedHashSet, java.util.LinkedList, java.util.List, java.util.Locale, java.util.Map, java.util.Map$Entry, java.util.Optional, java.util.Properties, java.util.Set, java.util.stream.Stream].
    at org.thymeleaf.spring6.expression.ThymeleafEvaluationContext$ThymeleafEvaluationContextACLMethodResolver.resolve(ThymeleafEvaluationContext.java:282) ~[thymeleaf-spring6-3.1.0.RELEASE.jar:3.1.0.RELEASE]

bankAccount.getId()$bankAccountId 都是java.util.UUID

在 Thymeleaf 表达式中无法转换为 String。禁止对 java.util 包对象的所有方法调用。

不确定什么是最正确的解决方法。我可以将 UUID 转换为 backAccount 对象中的字符串,将比较器方法添加到 backAccount 中,静态调用比较器实用程序或通过 @bean 表示法,甚至为 Thymeleaf 定义自定义方法并用作 #xxx() 表达式。

【问题讨论】:

    标签: spring spring-boot spring-mvc thymeleaf spring-thymeleaf


    【解决方案1】:

    有同样的问题,但这是 Spring 的一个错误。它在版本3.0.1 中得到解决。

    更多信息,看这里:https://github.com/thymeleaf/thymeleaf-spring/issues/200#issuecomment-545922604

    【讨论】:

      猜你喜欢
      • 2013-06-12
      • 2018-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-12
      • 1970-01-01
      • 2021-08-05
      • 1970-01-01
      相关资源
      最近更新 更多