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

2022-09-01 00:35:23

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

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

public List getunits(final String type);

我知道在JSP中你不能直接做到这一点,但你可以编写自定义函数,让你实现你想要的结果。你如何在Freemarker中解决这个问题?这与编写自定义函数相同吗?或者有没有办法实际调用这种函数?


答案 1

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

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

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

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


答案 2

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


推荐