我的FreeMarker方法返回一个带有$ {variable}的字符串 - 如何强制FreeMarker解析它?

时间:2014-08-28 09:59:06

标签: freemarker

我已经创建了一个从FreeMarker实现 TemplateMethodModelEx 的类。假设 exec()函数返回一个字符串:" Hello $ {username}"

我将类分配给数据模型中的方法:

dataModel.put("myMethod", myClassInstance);
dataModel.put("username", "John Doe");

我的HTML模板如下所示:

<p>${myMethod()}</p>

这意味着在处理模板时会生成以下输出:

<p>Hello ${username}</p>

由于我的数据模型中实际存在用户名值,因此我更希望输出为:

<p>Hello John Doe</p>

如何告诉FreeMarker解析 myMethod()的结果?我尝试了?eval ?解释,两者都无法实现我想要的效果。这可以用FreeMarker吗?

1 个答案:

答案 0 :(得分:1)

您需要从字符串中删除${}才能使用?eval。从您的方法返回username字符串,并使用?eval或从.vars获取变量。

<p>${classInstance.myMethod()?eval}</p>

<p>${.vars[classInstance.myMethod()]}</p>

如果您不想返回变量名,而是返回带有表达式的字符串(例如&#34; Hello $ {username}&#34;),请使用?interpret

<#assign inlineTemplate = classInstance.myMethod()?interpret>
<@inlineTemplate />