我正在使用freemarker模板作为java邮件服务的模板文件。我正在尝试制作通用的ftl模板,并将内容存储在数据库中。
这是我的示例java模型,我用它绑定数据
model.put("invref",dbModel.getinvoiceRefNumber());
model.put("myContent", "<p>Hi Your invocie ref number is ${invref}</p>");
我不想为每种电子邮件类型创建新的ftl文件,而是希望在运行时生成内容。但是它没有绑定内部ftl标签,我得到的输出是
Hi Your invocie ref number is ${invref}
我试着用下面的组合来显示html,但还是没有成功
${invref?html}
[#noescape]${invref?html}[/#noescape]
我要怎么做?
2条答案
按热度按时间slhcrj9b1#
我认为“不具约束力”是指
${invref}
未在输出中解析。您可以像下面这样解决这个问题,但是要注意安全性:可以将值放入db的人可以让您执行任意freemarker模板。看到了吗https://freemarker.apache.org/docs/app_faq.html#faq_template_uploading_security 更多。所以如果你的情况可以,那么:请注意,对于大多数其他人来说
<@myContent?interpret />
,但您使用的是方括号语法。还有,我看到你想用
?html
. 这是对字符串的html转义,因此,它与解释ftl无关。另外,如果您生成html电子邮件,请考虑使用自动转义(我知道您不使用自动转义,因为#noescape
不允许)。roqulrg32#
我就是这样做到的。
将公共页眉和页脚内容放置到静态ftl文件中。
使用utlitly classfreemarkertemplateutils将静态文件的内容作为字符串加载
stringtemplateloader允许我们加载多个模板字符串,包括主内容之后和之前的页眉和页脚内容(在我的示例中)