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

hbC*_*ber 5 freemarker

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

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

dataModel.put("myMethod", myClassInstance);
dataModel.put("username", "John Doe");
Run Code Online (Sandbox Code Playgroud)

我的 HTML 模板如下所示:

<p>${myMethod()}</p>
Run Code Online (Sandbox Code Playgroud)

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

<p>Hello ${username}</p>
Run Code Online (Sandbox Code Playgroud)

由于我的数据模型中实际上有一个用户名值,我宁愿希望输出为:

<p>Hello John Doe</p>
Run Code Online (Sandbox Code Playgroud)

如何告诉 FreeMarker 解析myMethod()的结果?我尝试了?eval?interpret,但都未能实现我想要的。FreeMarker 可以做到这一点吗?

Ale*_*r M 4

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

<p>${classInstance.myMethod()?eval}</p>
Run Code Online (Sandbox Code Playgroud)

或者

<p>${.vars[classInstance.myMethod()]}</p>
Run Code Online (Sandbox Code Playgroud)

如果您不仅想从方法返回变量名,还想返回带有表达式的字符串(例如“Hello ${username}”),则使用?interpret.

<#assign inlineTemplate = classInstance.myMethod()?interpret>
<@inlineTemplate />
Run Code Online (Sandbox Code Playgroud)

  • 可以消除`#assign`:`&lt;@classInstance.myMethod()?interpret /&gt;` (2认同)