在Freemarker中使用动态生成的名称调用函数

时间:2016-04-11 17:57:23

标签: java html freemarker

我能从Java Object调用一个从几个字符串生成名称的函数吗?在我的例子中,它是一个简单的吸气剂。好奇。

Process是一个像这样的Java对象:

public class Process {
   private int number = 0;

   public int getNumber() {
       return this.number;
   }

   public String getPropertyName() {
       return "number";
   }
}

假设我们将Process对象作为变量进程传递给freemarker模板,其中包含以下内容:

  

返回Results.html()。render(" process",new Process());

现在我们有一个包含以下代码的html页面。我想到的方法应该做这样的例子(示例不起作用!):

<#assign methodName = "process.get" + process.getPropertyName()?cap_first + "()">
<input name="${process.getPropertyName()}" type="number" value="${methodName}"/>

在html中解释的结果是:

  

<input name="number" type="number" value="process.getNumber()"/>

但它只是一个字符串,并且它不会在freemarker模板中解释为存储在方法中的值。

你怎么看?有没有办法实现这个目标

1 个答案:

答案 0 :(得分:1)

如果您只想动态访问某个字段,那么您可以这样写:

<input name="${process.propertyName}" type="number" value="${process[process.propertyName]}"/>

但是如果你真的想调用方法,那么你可以试试eval

<input name="${process.getPropertyName()}" type="number" value="${methodName?eval}"/>