繁体   English   中英

在Freemarker中使用Java属性

[英]Use Java Properties in Freemarker

HI,

我的应用程序中有一个典型的messages.properties文件。 我正在尝试使用Freemarker生成电子邮件。

Freemarker模板应该生成一个String ,然后我将通过电子邮件将String发送给用户。 但是,我们需要多语言。 所以我想到了Properties

我的属性文件如下所示:

mail.layout.contactus=Contacteer ons
mail.layout.greeting=Hoi

在Java中,我在HashMap输入Properties文件,如下所示:

rootMap.put("lang", (mail.getLanguage().equals(Language.FRENCH) ? langFR : langNL));

并尝试在FreeMarker中阅读它:

<p>${lang.mail.layout.greeting} ${user.firstname},</p>

但得到以下异常:

freemarker.core.InvalidReferenceException: Expression lang.mail is undefined on line 10, column 116 in layout/email.ftl.

奇怪的是,它只说lang.mail而不是lang.mail.layout.greeting

编辑:我尝试像这样定义我的键:

mail_layout_contactus=Contacteer ons
mail_layout_greeting=Hoi

哪个确实有效

我相信问题在于,使用lang.mail.layout.greeting的密钥,Freemarker会处理它之间的每个部分. s作为哈希,即可以具有子变量的容器变量 因此,它尝试从数据模型中获取lang引用的对象,然后尝试从lang获取mail引用的变量。 但是,在您的情况下,没有这样的对象,因此错误。

文档对变量名称有这样的说法

在此表达式中,变量名称只能包含字母(包括非拉丁字母),数字(包括非拉丁字母),下划线(_),美元($),符号(@)和哈希(#)。 此外,名称不得以数字开头。

您可以使用替代语法从哈希中获取数据 (只要表达式求值为字符串)

<p>${lang["mail.layout.greeting"]} ${user.firstname},</p>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM