2017-05-17 11 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 
} 

파일 : Groovy의 템플릿 엔진이 매개 변수를 무시하는 방법을 지원하는 경우 $ {PARAM1} $ {PARAM2} $ {3 당겨}

감사

+0

당신이 예상 출력을 쓸 수 있습니까? – dsharew

+0

예상 출력 : VALUE1 VALUE2 $ {PARAM3} – Paul

+1

솔직히 말해서 그루비 템플릿 엔진이 매개 변수를 무시하는 방법을 지원하는지 잘 모르겠습니다. 그러나 매개 변수를 다음과 같이 변경할 수 있습니다 :''def parameters = [ "PARAM1": "VALUE1", "PARAM2": "VALUE2", "PARAM3": "\ $ {PARAM3}" ] '''그러면 예상 결과를 얻을 수 있습니다. – dsharew

답변

1

내가 확실하지 않다 정직하게하려면, (해당하는 param이 없을 때 placeholder를 그대로 두지 만) 여기에 해킹이 있습니다.

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