簡體   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