2017-05-17 5 views
4

プレースホルダ(e.x。$ {PARAM1})を持つテンプレートがある場合、プログラムはそれらを正常に解決します。しかし、私がテンプレートエンジンに渡したプレースホルダだけを解決し、他の$ {}を無視したままにしておきたい場合はどうすればいいですか?現在、すべてのプレースホルダを解決できない場合、プログラムは失敗します。Groovyのテンプレートエンジンで欠落しているパラメータを無視する方法

static void main(String[] args) { 

    def template = this.getClass().getResource('/MyFile.txt').text 

    def parameters = [ 
     "PARAM1": "VALUE1", 
     "PARAM2": "VALUE2" 
    ] 
    def templateEngine = new SimpleTemplateEngine() 
    def output = templateEngine.createTemplate(template).make(parameters) 
    print output 
} 

ファイル:$ {PARAM1} $ {PARAM2} $ {PARAM3}

おかげ

+0

は、あなたが期待される出力を書き込むことができますか? – dsharew

+0

予想される出力:VALUE1 VALUE2 $ {PARAM3} – Paul

+1

正直言って、グルーヴィーテンプレートエンジンがパラメータを無視する方法をサポートしているかどうかはわかりません。しかし、あなたはあなたのパラメータを次のように変更できます: '' 'def parameters = [ " PARAM1 ":" VALUE1 "、 " PARAM2 ":" VALUE2 "、 " PARAM3 ":" \ $ {PARAM3} " ] '' 'これはあなたに期待される出力を与えるでしょう。 – dsharew

答えて

1

私はグルーヴィーなテンプレートエンジンがパラメータを無視する方法をサポートしているかどうかわからない正直に言うと。 (対応するパラメータがない場合はプレースホルダをそのまま残しますが)ここではハックです。

import groovy.text.*; 

def template = "\${PARAM1} \${PARAM2} \${PARAM3} \${PARAM4} \${PARAM5} \${PARAM6}" 

//example hard coded params; you can build this map dynamically at run time 
def parameters = [ 
    "PARAM1": "VALUE1", 
    "PARAM2": "VALUE2", 
    "PARAM3": null, 
    "PARAM4": "VALUE4", 
    "PARAM5": null, 
    "PARAM6": "VALUE6" 
] 

//this is the hack 
parameters.each{ k, v -> 
    if(!v){ 
     parameters[k] = "\$$k" 
    } 
} 


def templateEngine = new SimpleTemplateEngine() 
def output = templateEngine.createTemplate(template).make(parameters) 
print output 

出力:

VALUE1 VALUE2 $PARAM3 VALUE4 $PARAM5 VALUE6 
+0

ありがとう、私はそれを使用します – Paul

+0

大丈夫です。それがうれしいです。 – dsharew

関連する問題