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

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

我有一个对象模型,我试图用Freemarker渲染成一个网页。 其中一个对象有一个获取其内容子列表的方法 – 用一个参数来过滤列表:

public List getunits(final String type);

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

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

假设你的对象已经被暴露为myBean你可以调用该方法,如下所示:

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

当然,你不必使用<list> ,因为你的方法返回一个列表。

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