使用Freemarker中的参数调用Java方法

时间:2012-05-07 17:45:54

标签: java freemarker

以下FTL标记对我来说很好,并在我的服务器端JiveActionSupport对象中调用getWidgets():

<#list widgets! as widget>
  -- do something with widget.sku
</#list>

但是,我真的需要一个依赖于widget属性的内部列表,如下所示:

<#list widgets! as widget>
  <#list manufacturers(widget.sku)! as manufacturer>
  -- do something with manufacturer
  </#list>
</#list>

我试图将服务器端代码实现为:

public List<Manufacturer> getManufacturers(int sku);
public List<Manufacturer> getManufacturers(String sku);

但两者都导致'表达式制造商在第123行未定义。

如何将参数传递给当前JiveActionSupport对象的方法?感谢。

2 个答案:

答案 0 :(得分:8)

可能让您感到困惑的是,getFoo()可以被称为foo,但getFoo(param)不能被称为foo(param),只能被称为getFoo(param) }}。但这正是JavaBeans的工作方式; getFoo()定义了JavaBean属性,而getFoo(params)则没有。

无论如何,如果getManufacturers是数据模型(根)对象的方法,那么(假设正确的对象包装)您应该能够将其称为getManufacturers(param)。您原则上不需要使用action.启动它。

答案 1 :(得分:3)

通常,看起来您需要执行以下操作:

<#list action.getManufacturers("123")! as manufacturer>
  -- do something with manufacturer
</#list>

特别是,虽然您可以在FTL中使用 things 来调用服务器端方法 getThings(),但您需要使用 action.getThing(“ 123“)调用服务器端方法 getThing(String)