我的 FreeMarker 方法返回一个带有 $variable 的字符串——如何强制 FreeMarker 解析它?
Posted
技术标签:
【中文标题】我的 FreeMarker 方法返回一个带有 $variable 的字符串——如何强制 FreeMarker 解析它?【英文标题】:My FreeMarker method returns a string with $variable -- how to force FreeMarker to parse that?我的 FreeMarker 方法返回一个带有 $variable 的字符串——如何强制 FreeMarker 解析它? 【发布时间】:2014-10-22 03:33:54 【问题描述】:我创建了一个从 FreeMarker 实现 TemplateMethodModelEx 的类。假设 exec() 函数返回一个字符串:"Hello $username"
我将类分配给数据模型中的一个方法:
dataModel.put("myMethod", myClassInstance);
dataModel.put("username", "John Doe");
我的 html 模板如下所示:
<p>$myMethod()</p>
这意味着在处理模板时会生成以下输出:
<p>Hello $username</p>
由于我的数据模型中实际上有一个 username 值,我希望输出为:
<p>Hello John Doe</p>
如何告诉 FreeMarker 解析 myMethod() 的结果?我尝试了 ?eval 和 ?interpret 都未能完成我想要的。 FreeMarker 可以做到这一点吗?
【问题讨论】:
您的模板是以指令[#ftl]
还是<#ftl>
开头的? freemarker.org/docs/ref_directive_ftl.html
我的模板中没有 指令。我可以在 FTL 指令中设置一个参数来解决我的情况吗?
【参考方案1】:
您需要从字符串中删除$
才能使用?eval
。从您的方法中将username
作为字符串返回并使用?eval
或从.vars
获取变量。
<p>$classInstance.myMethod()?eval</p>
或
<p>$.vars[classInstance.myMethod()]</p>
如果您想从方法中返回的不仅是变量名,而且是带有表达式的字符串(例如“Hello $username”),请使用?interpret
。
<#assign inlineTemplate = classInstance.myMethod()?interpret>
<@inlineTemplate />
【讨论】:
感谢您的意见。我已经更新了我的问题——事实上,我的课程返回了一个句子,其中 $username 是句子的一部分。因此,我无法评估整个事情。 那个#assign
可以去掉:<@classInstance.myMethod()?interpret />
是的,当然,如果该表达式只使用一次,那么#assign
就没有意义了。以上是关于我的 FreeMarker 方法返回一个带有 $variable 的字符串——如何强制 FreeMarker 解析它?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用带有 hashmap 变量的 freemarker 列表