2013-05-27 5 views
0

나는 freemarker 초보자이며 일부 반복적 인 코드를 생성하는 데 사용하고 싶습니다. 나는이 간단한 템플릿을 가지고Freemarker : 중첩 된 템플릿

ValueProvider<Point,Integer> x(); 
ValueProvider<Point,Integer> y(); 
ValueProvider<Point,String> name(); 

는이를 위해 :

public class Point { 
    private Integer x; 
    private Integer y; 
    private String name; 
} 

는이 같은 라인을 생성하기 위해, 각 속성에 대한 필요 :이 같은 간단한 클래스에서

ValueProvider<${clazz},${attrType}> ${attrName}(); 

다음과 같이 전체 클래스를 생성하고 싶습니다.

이를 위해 6,
public final class PointValueProviders { 

    public interface PointPropertyAccess extends PropertyAccess<Point>{ 
    ValueProvider<Point,Integer> x(); 
    ValueProvider<Point,Integer> y(); 
    ValueProvider<Point,String> name(); 
    } 

    public static final PointPropertyAccess POINT_PA= GWT.create(PointPropertyAccess.class); 

    private PointValueProviders(){} 

}; 

, 나는 문제가 : 나는 어떻게이 같은 더 큰 템플릿에있는 작은 템플릿을 여러 번 예측할 수를 적용 모른다 :

public final ${clazz}ValueProviders { 

    public interface ${clazz}PropertyAccess extends PropertyAccess<${clazz}>{ 

    //Here, How do I tell freemarker to use the small template??? 

    //ValueProvider<${clazz},${attrType}> ${attrName}(); 
    //ValueProvider<${clazz},${attrType}> ${attrName}(); 
    //ValueProvider<${clazz},${attrType}> ${attrName}(); 
    //ValueProvider<${clazz},${attrType}> ${attrName}(); 
    //etc.. 

    } 

    public static final ${clazz}PropertyAccess ${clazzUpperCase}_PA= GWT.create(${clazz}PropertyAccess.class); 

    private ${clazz}ValueProviders(){} 

}; 

어떤 생각을?

답변

1

템플릿은 귀하가 제공 한 일부 데이터를 표시해야합니다. 따라서 중요한 질문은 템플릿이 어떻게 class/attrType/attrName 개의 트리오를 출력하는지 알 수 있습니까? 당신은 또는 #include (이 하나가 더 유연) 작은 재사용 가능한 템플릿을 생성하거나 #macro을 사용하는 그렇지 않으면

<#list props as prop> 
    ValueProvider<${prop.clazz},${prop.attrType}> ${prop.attrName}(); 
</#list> 

와 그것을 통해 다음 단지 루프의이 props을 부르 자, 사람들의 목록을 제공하고 있습니다. FreeMarker Manual에서 확인하십시오.

+0

목록과 함께 솔루션을 적용했습니다. Entry < "props", List >>을 데이터 모델에 추가 한 다음 템플릿을 사용했습니다. 그것은 좋은 일 :) –

관련 문제