我创建了一个从 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 可以做到这一点吗?
您需要${}从字符串中删除才能使用?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)
| 归档时间: |
|
| 查看次数: |
5812 次 |
| 最近记录: |