2016-04-11 19 views
1

Birkaç dizeden bir ad üreten Java Nesnesinden bir işlevi çağırabilir miyim? Örneğimde, basit bir alıcı. Sadece merak.Freemarker'da dinamik olarak oluşturulan adla çağrı işlevi

dönüş Results.html:

public class Process { 
    private int number = 0; 

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

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

en böyle bir şey ile değişken süreç olarak freemarker şablonuna Süreç nesne geçti diyelim:

Süreç böyle bir Java nesnesidir() .render ("süreç", yeni Süreç());

Şimdi aşağıdaki kod parçasını içeren bir html sayfamız var. Aklımdaki yöntem bu örnekteki gibi bir şey yapmalıyım (örnek değil iş !):

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

:

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

html yorumlanır sonuç şudur

Ancak bu sadece bir dizedir ve freemarker şablonunda yöntemin içinde saklanan bir değer olarak yorumlanmaz.

Ne düşünüyorsun, Bu elde etmek için bir yolu var mı?

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

Ama gerçekten yöntemini aramak istiyorsanız, o zaman eval ile deneyebilirsiniz: Yalnızca dinamik bir alan erişmek isterseniz

cevap

1

, o zaman bunu böyle yazabilirsiniz

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

Teşekkürler, bu kadar! Belki de çözümü kendim bulmak için çok geç oldu;) – Krt