2016-04-11 2 views
1

Могу ли я вызвать функцию из объекта Java, которая сгенерировала имя из нескольких строк? В моем примере это простой геттер. Просто любопытно.Функция вызова с динамически сгенерированным именем в Freemarker

процесс является объектом Java, как это:

public class Process { 
    private int number = 0; 

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

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

Допустим, мы проходили мимо объекта процесса в шаблоне Freemarker как переменную процесса с чем-то вроде этого:

возвращение Results.html() .render («процесс», новый 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

Если вы хотите, чтобы динамически доступ к полю, то вы можете написать это так:

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

Но если вы действительно хотите, чтобы вызвать метод, то вы можете попробовать с eval:

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

Спасибо, вот и все! Может быть, было слишком поздно найти решение самостоятельно;) – Krt