Thymeleaf模型属性不允许以“is”开头吗?

4

我正在编写一个Spring Boot 应用程序,发现了一种奇怪的行为:如果属性名以 is 开头,例如:isIgnoreRequest,Thymeleaf 就无法找到它,但如果我将其更改为 ignoreRequest,则可以工作。

所以我的问题是:我不允许在开头使用 is 吗?

以下是更多上下文:

data class Response(val isIgnoreRequest: Boolean = false,
                    val name: String = StringUtils.EMPTY)

...

//This is how I add the attribute
//Info = Response object
redirectAttributes.addFlashAttribute(ATTRIBUTE_RESPONSE, info)

使用上述代码,Thymeleaf无法找到属性:在类型为...的对象上找不到属性或字段'isIgnoreRequest' - 可能不是公共的或无效的?

如果我删除is,它可以正常工作。虽然听起来很愚蠢,但我认为is确实是我的问题。

1个回答

4

是的,模型属性可以以is开头。问题不是来自thymeleaf,而是来自kotlin(很好把它放在标记中)。让我解释一下:

当您在thymeleaf中引用模型属性时,它会使用常规约定查找该属性的getter/setter方法;在您的示例中,对于属性isIgnoreRequest,thymeleaf将查找方法getIsIgnoreRequestsetIsIgnoreRequest

kotlin为isXXX布尔值生成getter和setter的方式与标准方式不同,导致thymeleaf在使用标准语法调用它们时失败。您可以在以下链接中查看有关kotlin为布尔值生成getter和setter的更多信息:

https://github.com/sockeqwe/fragmentargs/issues/46 或者

https://github.com/sockeqwe/sqlbrite-dao/issues/27

要解决您的问题,最好的解决方案可能是以不同的方式命名属性,以便kotlin不会干扰生成getter和setter方法的标准过程(在我的意见中,这只会不必要地使事情变得复杂;尽管像JSF这样的一些框架从一开始就存在isXXX布尔值的类似问题)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接