我正在尝试将Thymeleaf
view 与Scala
. 我有User
一个包含电子邮件集合的实体,我想在 Thymeleaf 模板中访问这些电子邮件:
在 User.scala 中
case class User (@BeanProperty val emails: scala.immutable.List[String])
在一些百里香模板.html
<div th:text="${user.emails[0]}">...</div>
问题是 Spring 表达式求值器(Thymeleaf 将表达式求值作业委托给它)只理解 Java 集合类型,因此尝试获取[0]
Scala 列表 ( ) 的第一个元素 ( user.emails
) 失败并出现异常。
我试图深入研究 SpEL 源代码,以找到一个可以添加 Java 到 Scala 转换的地方。似乎如果我可以拦截对该方法的调用org.springframework.expression.PropertyAccessor.read(..)
并在从该方法返回时执行转换,它可能会起作用。
但我找不到拦截这些电话的方法。我考虑过用代理包装这些属性访问器实例,但是它们的初始化代码被硬编码到 ThymeleafSpelExpressionEvaluator
和类中SpelVariableExpressionEvaluator
,SpelEvaluationContext'
因此我没有明显的地方可以放置我的包装器。
是否有任何或多或少优雅的方式来包装 Thymeleaf 中使用的属性访问器(或更一般地向 Thymeleaf 和/或 SpEL 添加 Scala 集合支持)而不重写太多 Thymeleaf 和 SpEL 胆量?
先感谢您!