【问题标题】:Thymeleaf unable to evaluate internationalized expressionThymeleaf 无法评估国际化表达
【发布时间】:2018-05-25 23:53:17
【问题描述】:

我正在努力实现国际化,我有以下 html 标记。

<p th:text= "${your_amount(${it.vm.getAmount})}"></p>

生成html为

<p>Your Amount is: $</p>

Your Amount is: $ 正是我的国际化字符串。 理想的结果应该是。

<p>Your Amount is: $123.24</p>

it.vm.getAmount 不会被执行。我检查了getAmount 内部是否存在以下值

<p th:text="${it.vm.getAmount}"></p>

这给了我一个结果

<p>123.24</p>

thymeleaf 在渲染时是否认为"$" 是一个特殊字符,有没有办法解决这个问题?

【问题讨论】:

  • 什么是your_amount?它是一种格式化本地化文本和数量的方法吗?如果是这样,请包含该方法的完整代码。如果不是,请进一步解释..
  • 不,它只是我的 .properties 文件中的一个国际化字符串常量。没有格式。
  • 在这种情况下,语法出现错误。你试过${your_amount}\$${it.vm.getAmount}之类的吗?
  • 感谢 Jim 我刚刚给出的表达方式,并且 thymeleaf 向该语句抛出了 TemplateProcessingException。我也不认为我使用的表达是不正确的。我在我的 sn-p 中多次成功地使用了相同的表达式。我相信这与 : $ 在我的字符串中的存在有关。我可能会删除它并试一试。

标签: java html thymeleaf


【解决方案1】:

这个表达式:

<p th:text= "${your_amount(${it.vm.getAmount})}"></p>

不是有效的语法——有很多原因。

  1. ${} 表达式永远不会嵌套在其他 ${} 表达式中——除非您正在预处理。
  2. 如果your_amount 是字符串,则不能将其用作函数your_amount(...)。
  3. it.vm.getAmount 不应该工作——除非你真的将你的 getter 方法命名为 getGetAmount()。它应该是it.vm.amount 或it.vm.getAmount()。

当我尝试你的表达时,我得到了这个错误:

Method your_amount(java.lang.String) cannot be found on org.thymeleaf.spring4.expression.SPELContextMapWrapper

如果你只是想将不同的字符串附加在一起,你真的应该这样做:

<p th:text= "${your_amount + it.vm.getAmount}"></p>

或

<p>
    <span th:text="${your_amount}"><span th:text="${it.vm.getAmount}">
</p>

或

<span th:text="|${your_amount}${it.vm.getAmount}|" />

【讨论】:

  • 嗨银河战士,谢谢你的回答。您的所有三个解决方案都有效。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2015-02-22
  • 1970-01-01
  • 2019-11-30
  • 2017-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多