如何从 FreeMarker 模板调用对象上的 java 方法?

问题描述 投票:0回答:2

是否可以调用从 Freemarker 模板获取参数的方法?

我有一个对象模型,我正在尝试使用 Freemarker 将其呈现到网页中。其中一个对象有一种方法来获取其内容的子列表 - 采用用于过滤列表的参数:

public List getunits(final String type);

我知道在 JSP 中你不能直接这样做,但你可以编写自定义函数来实现你想要的结果。你如何在 Freemarker 中解决这个问题?编写自定义函数是否相同?或者有什么方法可以实际调用这种函数吗?

java freemarker
2个回答
44
投票

FreeMarker 允许从 expressions 中调用通过模型提供的方法。

假设您的对象已公开为

myBean
,您可以按如下方式调用该方法:

<#list myBean.getunits("myType") as unit>
  do stuff with ${unit}
</#list>

你不必使用

<#list>
,当然,它只是作为一个例子,因为你的方法返回一个列表。


23
投票

正如 ChssPly76 所说,只要在模型中公开对象,就可以从 Freemarker 模板中执行方法调用。

但是请务必记住,如果您的方法返回 NULL(无论出于何种原因),您将会感到困惑

Expression myBean.getunits() is undefined on line ....

为避免这种情况,您最好使用

myBean.getunits(...)!
(注意感叹号)。

在此处了解有关 Freemarker 如何处理空值的更多信息:http://freemarker.org/docs/dgui_template_exp.html#dgui_template_exp_missing

© www.soinside.com 2019 - 2024. All rights reserved.