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

Posted

技术标签:

【中文标题】在 Freemarker 中使用动态生成的名称调用函数【英文标题】:Call function with dynamically generated name in Freemarker 【发布时间】:2016-08-02 00:54:44 【问题描述】:

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

Process 是这样的 Java 对象:

public class Process 
   private int number = 0;

   public int getNumber() 
       return this.number;
   

   public String getPropertyName() 
       return "number";
   

假设我们将 Process 对象作为变量 process 传递给 freemarker 模板,如下所示:

return Results.html().render("process", new Process());

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

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

在 html 中解释的结果是这样的:

&lt;input name="number" type="number" value="process.getNumber()"/&gt;

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

你怎么看,有没有办法做到这一点

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

谢谢,就是这样!也许自己找到解决方案为时已晚;)

以上是关于在 Freemarker 中使用动态生成的名称调用函数的主要内容,如果未能解决你的问题,请参考以下文章

Freemarker在Java中的使用(动态生成多条数据及多张图片)

在 Freemarker 模板中,如何获取数据模型类的名称?

动态 Freemarker 变量名

如果父元素的名称在freemarker中有点,如何读取子元素中的文本

java用模板生成word(docx)文档(含动态表格)

freemarker生成word文档