2016-09-28 6 views
0

私は自分のエンティティにいくつかのビルダー関数を持っていますが、これはfreemarkerで処理できません。Freemarker - 豆にのみゲッターを使用します。

例えば、私は以下の豆/エンティティを持っている:

public class User{ 

    private Long number; 

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

    public void setNumber(Long number){ 
     this.number = number; 
    } 

    public User number(Long number){ 
     this.number = number; 
    } 
} 

そして、私のFreeMarkerのテンプレートは次のようなものです:

次のように私はその場で処理する
<span>${user.number}</span> 

User user = getUser(); 
Map<String, Object> context = new HashMap<>(); 
contaxt.put("user", user); 
Configuration configuration = new Configuration(Configuration.VERSION_2_3_0); 
configuration.setObjectWrapper(new BeansWrapper(Configuration.VERSION_2_3_0)); 
Template t = new Template("usertpl", template, configuration); 
String result = FreeMarkerTemplateUtils.processTemplateIntoString(t, model); 

エンティティに「number(Long)」メソッドが含まれているため、freemarkerはこれを使用しようとします。これは実際にはセッター - それは動作していません。

は、私は私がテンプレートにゲッターを使用できることを、知っているが、

だから、私は」(私は${user.number}は、プログラマでない人のための${user.getNumber()}より分かりだと思うところ)テンプレートは、ユーザーが定義する必要があります別の解決策を探しています...

number(Long)ではなく、ゲッター(getNumber())を使用してプロパティにアクセスするようにfreemarkerを構成する可能性はありますか?

答えて

2

BeansWrappersetMethodAppearanceFineTunerのように設定できます。性急なコピーペースターのために、私はここに代わりnewDefaultObjectWrapper代わりのBeansWrapper、およびVERSION_2_3_25代わりのVERSION_2_3_0のビルダーを使用しますが、これはまた、あなたの設定で動作します:「実験のよう

DefaultObjectWrapperBuilder owb = new DefaultObjectWrapperBuilder(Configuration.VERSION_2_3_25); 
owb.setMethodAppearanceFineTuner(new MethodAppearanceFineTuner() { 
    @Override 
    public void process(MethodAppearanceDecisionInput in, MethodAppearanceDecision out) { 
     out.setMethodShadowsProperty(false); 
    } 
}); 
cfg.setObjectWrapper(owb.build()); 

をJavaDocの免責事項は、2.3.26に実験的な状態を残すことになるので、心配しないでください。

+0

私はようやくそれを確認するために少し時間を割いて、今働いています。ありがとう! – Indivon

関連する問題