【发布时间】:2019-04-02 11:12:58
【问题描述】:
我正在尝试通过连接变量的值并在之后添加一些字符串来动态构建 var 的名称,因为我在运行时添加了这些变量。像下面这样的东西应该可以工作,但不能。
th:text="${__#{myClass.getA().getB()}+'-result'__}"
这甚至可能吗?不知道变量名,可惜只能这样构造。
【问题讨论】:
标签: spring spring-boot thymeleaf
我正在尝试通过连接变量的值并在之后添加一些字符串来动态构建 var 的名称,因为我在运行时添加了这些变量。像下面这样的东西应该可以工作,但不能。
th:text="${__#{myClass.getA().getB()}+'-result'__}"
这甚至可能吗?不知道变量名,可惜只能这样构造。
【问题讨论】:
标签: spring spring-boot thymeleaf
是的,这是可能的,Thymeleaf 支持表达式预处理:
让我们从一些例子开始: message(i18n) 表达式应使用# 字符引用。因此,假设您的翻译文件中有 message.key。要在 Thymeleaf 中引用它,您必须使用
th:text="#{message.key}"
在您的场景中,您的键名是根据变量动态生成的,因此要在 thymeleaf 中对其进行预处理,您需要使用两个下划线 __
假设在您的上下文中,您有一个名为 myModelVariable 的模型变量,其方法是 messagePrefix()。我们的例子变成:
th:text="#{__${myModelVariable.messagePrefix()}__}"
这意味着 myModelVariable.messagePrefix() 将首先被处理,结果将用作键名,然后将其解析为用户友好的消息。
如果您还想在末尾添加一个静态部分,则如下所示:
th:text="#{__${myModelVariable.messagePrefix()}__}+'*'"
即使密钥也可以包含静态部分,所以也可以接受:
th:text="#{__${myModelVariable.messagePrefix()}__.staticsuffix}+'*'"
您可以在此处的第 2.7 节中找到更多信息: https://www.thymeleaf.org/doc/articles/standarddialect5minutes.html
【讨论】: