2016-04-11 11 views
1

いくつかの文字列から名前を生成したJava Objectから関数を呼び出せますか?私の例では、単純なゲッターです。ちょっと興味があるんだけど。Freemarkerで動的に生成された名前を持つ呼び出し関数

プロセスは、このようなJavaオブジェクトです:

public class Process { 
    private int number = 0; 

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

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

は、我々はこのような何かを持つ変数プロセスとしてFreeMarkerのテンプレートにProcessオブジェクトを渡されたとしましょう:

リターンResults.html ()。レンダー( "プロセス"、新しいプロセス());

ここでは、次のコードを含むHTMLページがあります。私が考えている方法は、この例のような何か行う必要があります(例では動作しません!):

<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に解釈した結果がこれです

しかしそれは単なる文字列であり、フリーメーカテンプレートではメソッドの中に格納された値として解釈されません。

はこれを達成する方法があると思いますか

答えて

1

だけ動的にフィールドにアクセスする場合は、あなたがそのようにそれを書き込むことができます。

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

しかし、あなたが本当にメソッドを呼び出したい場合は、evalで試すことができます。

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

ありがとうございました!たぶん自分自身で解決策を見つけるのが遅すぎたかもしれない;) – Krt

関連する問題