2014-10-29 2 views
0

목적 :는 기본적으로, 나는 "라이프 사이클"메소드 이름의 소수를 가지고 있고 그들 각각에 대해 코드를 생성하려면 다음과 같은 형식목록 항목을 특성으로 보간 하시겠습니까?

public void save(){ 
    helper.save(); 
} 

public void load(){ 
    helper.load(); 
} 

//Other such lifecycle methods 

의 자바 코드를 생성하는 프리 마커를 사용합니다. 그러나 전달 된 모델 객체가 전달해야하는 경우에만 메소드를 생성합니다.

<#assign methodNames = ["load", "save"]> 
<#list methodNames as method> 
<#if model.method> 
public void ${method}(){ 
    helper.${method}(); 
} 
</#if> 
</#list> 

그러나, <#if> 문이 작동하지 않습니다 :

public class Model{ 
    private boolean load; 
    private boolean save; 
    //bools for other lifecycle methods 

    public Model(boolean load, boolean save){ 
     this.load = load; 
     this.save = save; 
    } 

    public boolean getLoad(){ 
     return load; 
    } 

    public boolean getSave(){ 
     return save; 
    } 
} 

내 프리 마커 템플릿 :처럼 내 모델 클래스 보인다. Freemarker는 model.methodnull이라고 불평합니다. Freemarker가 modelsave 또는 load으로 해결하지 않고 내 모델에서 getMethod()을 찾고 나서 getSave() 또는 getLoad()을 찾고있는 것 같습니다. 내가 <#if> 안에 그 <@methodRequired>을 수 없다는 오류가

<#assign methodNames = ["load", "save"]> 
<#list methodNames as method> 
<#assign methodRequired = r"model.${method}"> 
<#if <@methodRequired?interpret>> 
public void ${method}(){ 
    helper.${method}(); 
} 
</#if> 
</#list> 

이 실패

나는 다음하지만 모든 경우에 프리 마커에 대한 하나의 구문 오류 또는 다른 불평했습니다. 나는 또한 직접 <#if model.${method}> 시도했지만 분명히 작동하지 않습니다. - 가 어떻게 프리 마커가 다른 모델 객체 내부에서 나에게리스트 변수의 값을 제공하도록 요청 않는

//Obtain a writer object first. Then ... 
Model model = new Model(true, false); 
myTemplate.process(model, writer); 
writer.close(); 

그래서, 질문은 :

완성도를 들어, 여기에 내가 템플릿을 호출하는 방법은?

답변

1

다른 일반적인 언어와 매우 비슷합니다. model[method]. model.method은 실제로 model["method"]의 속기입니다. 그리고 model["foo" + someVar]과 같은 것을 쓸 수도 있습니다. 따라서 someContainer[someKeyExpression]입니다.

+0

그 트릭을했습니다. 필자가해야만하는 것은'if' 조건에서이 구문을 사용하는 것입니다 :'<# if model [method]>' – curioustechizen

관련 문제