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

时间:2009-09-01 12:55:32

标签: java freemarker

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

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

public List getunits(final String type);

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

2 个答案:

答案 0 :(得分:36)

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

假设您的对象已被公开为myBean,您可以按如下方式调用该方法:

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

您不必使用<list>,当然,它只是作为示例,因为您的方法返回一个列表。

答案 1 :(得分:21)

正如 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