【问题标题】:Retrieve value of key when key is declared on java class在java类上声明键时检索键的值
【发布时间】:2020-02-21 11:34:57
【问题描述】:

我正在使用 spring web flow 2.5.0 和 thymeleaf 3.0.9

我有一个包含一些静态键的类,例如:

public class MyKeys{
 .....
 public static final String myKey = "myKey1"
 .....  
}

我在控制器的某个地方存储了该键的值,以便在模板文件中可用。

(伪代码):

context.add(MyKeys.mykey,"screen.home.welcome");

screen.home.welcome 是一个 i18n 消息密钥(存储在应用程序的 message.properties 上),我想将其值呈现给用户。

这可行我想使用来自MyKeys 类的键来访问它的值。

<div th:utext="#{${myKey1}}"></div>

我尝试过但没有工作:

<div th:utext="#{${T(com.package.MyKeys).myKey}}"></div>

有了这个,我在模板中得到的是myKey1。如何指示 thymeleaf 检索与 myKey1 关联的值?

【问题讨论】:

  • 可能是<div th:utext="#{'${T(com.package.MyKeys).myKey}'}"></div><div th:utext="#messages.msg('${T(com.package.MyKeys).myKey}')"></div><div th:utext="#messages.msg(T(com.package.MyKeys).myKey}"></div>
  • @rptmat57 不幸的是,它们都不起作用,它们都呈现messages.msg。最后一个可能包含语法错误。

标签: thymeleaf spring-webflow


【解决方案1】:

你想要的那个间接级别有点奇怪......这不起作用的原因:

<div th:utext="#{${T(com.package.MyKeys).myKey}}"></div>
// Resolves to
<div th:utext="#{myKey1}"></div>
// Which isn't the actual message key since it's supposed to look like this:
<div th:utext="#{screen.home.welcome}"></div>

我可能不会推荐它,但您可能会为此使用预处理。像这样的东西可能对你有用:

<div th:utext="#{${__${T(com.package.MyKeys).myKey}__}}"></div>
// Resolves to
<div th:utext="#{${myKey1}}"></div>
// Resolves to
<div th:utext="#{screen.home.welcome}"></div>

这可能也可以:

<div th:utext="#{${#root.get(T(com.package.MyKeys).myKey)}}"></div>

【讨论】:

  • 两种解决方案都有效!谢谢,我想我应该选择第二个?您能否也简要说明一下为什么不建议进行预处理?
  • 预处理很危险,因为myKey 的值可能会导致运行时错误。第二个可能会更好。
猜你喜欢
  • 2023-03-30
  • 2016-01-13
  • 1970-01-01
  • 2017-03-30
  • 2011-04-15
  • 2011-03-26
  • 1970-01-01
  • 2012-06-18
相关资源
最近更新 更多