2015-02-07 1 views
2

public static Java 변수를 매개 변수 중 하나로 사용하는 FreeMarker 템플릿에서 Java 메서드를 호출하려고합니다. 예를 들어, test.ftl에서 프리 마커 코드는이 경우 : 다음과 같이 그 템플릿을 사용할 때이 오류가 발생FreeMarker에서 public Java 변수를 호출하는 방법

public class JavaClass { 

    public static final int VARIABLE = 1; 

    public String getSomething(int var) { 
    ... 
    } 

:

${javaClass.getSomething(javaClass.VARIABLE)} 

및 클래스 JavaClass은 다음과 같습니다 경우

[echo] Expression JavaClass is undefined on line 40, column 81 in com/test/template/path/test.ftl. [echo] The problematic instruction: [echo] ---------- [echo] 03:53:01,146 ERROR [main][runtime:96] Template processing error: "Expression JavaClass is undefined on line 40, column 81 in com/test/template/path/test.ftl" [echo] [echo] ==> ${javaClass.getSomething(javaClass.VARIABLE)} [on line 40, column 25 in com/test/template/path/test.ftl] Expression JavaClass is undefined on line 40, column 81 in com/test/template/path/test.ftl. [echo] [echo] ----------The problematic instruction: [echo] [echo] [echo] ---------- [echo] Java backtrace for programmers: [echo] ---------- [echo] ==> ${javaClass.getSomething(javaClass.VARIABLE)} [on line 40, column 25 in com/test/template/path/test.ftl]freemarker.core.InvalidRe ferenceException: Expression JavaClass is undefined on line 40, column 81 in com/test/template/path/test.ftl. ... ...

이 오류는 javaClass.VARIABLE과 thro가 마음에 들지 않는다고 불평하고 있습니다. InvalidReferenceException과 함께합니다. JavaClass.VARIABLE, ${javaClass.VARIABLE}${JavaClass.VARIABLE}과 같이 다른 방법으로 지정하려고 시도했지만 모두 오류가 발생합니다.

FreeMarker (.ftl) 템플릿의 Java 메소드에서 공개 Java 변수를 어떻게 호출합니까?

답변

2

Freemarker의 데이터 모델은 자동 전달 된 개체에 정적 필드를 매핑하지 않으므로 beanwrapper http://freemarker.org/docs/pgui_misc_beanwrapper.html을 사용해야합니다.

import freemarker.ext.beans.BeansWrapper; 

BeansWrapper w = new BeansWrapper(); 
TemplateHashModel statics = w.getStaticModels(); 
model.addAttribute("myVariable", statics); 

는 템플릿에, 그것은의 (a`DefaultObjectWrapper` 같이)`BeansWrapper` 서브 클래스의 가정, 그것은`Configuration`에 사용 된`ObjectWrapper`를 사용하는 것이 좋습니다

${myVariable["fully.qualified.package.ClassName"].FIELD_NAME} 
+0

사용합니다. – ddekany

+1

또한'model.addAttribute ("ClassName", statics.get (ClassName.class.getName()))'을 사용하는 것이 더 좋을 것입니다. 그러면 템플릿에서 간단히'$ {ClassName.FIELD_NAME}'을 쓸 수 있습니다. – ddekany

+0

yea, fair enough - 키를 classname으로 만든 다음 해당 클래스의 모델을 개별적으로 추가하는 것이 좋습니다. – Chii

관련 문제