【问题标题】:Call function with dynamically generated name in Freemarker在 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 模板中解释为存储在方法中的值。

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

【问题讨论】:

    标签: java html freemarker


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢,就是这样!也许自己找到解决方案为时已晚;)
    猜你喜欢
    • 2018-12-04
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-17
    • 1970-01-01
    相关资源
    最近更新 更多