2016-04-11 5 views
1

Kann ich eine Funktion von Java Object aufrufen, die aus ein paar Strings einen Namen generiert hat? In meinem Beispiel ist es ein einfacher Getter. Nur neugierig.Aufruf der Funktion mit dynamisch generiertem Namen in Freemarker

Prozess ist ein Java-Objekt wie folgt:

public class Process { 
    private int number = 0; 

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

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

Lassen Sie uns sagen, dass wir den Prozess Objekt in Freemarker-Vorlage als Variable Prozess mit so etwas wie dies passiert:

Rückkehr results.html() .render ("Prozess", neuer Prozess());

Jetzt haben wir eine HTML-Seite, die den Code unten enthält. Die Methode, die ich im Sinn haben sollte so etwas wie dieses Beispiel tun (das Beispiel funktioniert NICHT!):

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

Das Ergebnis in HTML interpretiert, ist dies:

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

Aber es ist nur eine Zeichenfolge und es wird nicht in Freemarker Vorlage als ein Wert in der Methode gespeichert interpretiert.

Was denken Sie, gibt es eine Möglichkeit, diese zu erreichen?

Antwort

1

Wenn Sie nur dynamisch wollen ein Feld zuzugreifen, dann kann man es so schreiben:

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

Aber wenn Sie wirklich Methode aufrufen wollen, dann können Sie versuchen, mit eval:

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

Danke, das war's! Vielleicht war es einfach zu spät, die Lösung selbst zu finden;) – Krt