如何在 FreeMarker 中调用 public Java 变量
How to call public Java variable in FreeMarker
我试图在我的 FreeMarker 模板中调用 Java 方法,该方法使用 public 静态 Java 变量作为其参数之一。例如,如果 test.ftl
中的 FreeMarker 代码是这样的:
${javaClass.getSomething(javaClass.VARIABLE)}
如果 class JavaClass
看起来像这样:
public class JavaClass {
public static final int VARIABLE = 1;
public String getSomething(int var) {
...
}
我在使用如下所示的模板时收到错误消息:
[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
并抛出 InvalidReferenceException
。我试过用其他不同的方式指定它,例如 JavaClass.VARIABLE
、${javaClass.VARIABLE}
和 ${JavaClass.VARIABLE}
,但它们都会抛出错误。
如何从 FreeMarker (.ftl) 模板的 Java 方法中调用 public Java 变量?
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);
然后在您的模板中使用
${myVariable["fully.qualified.package.ClassName"].FIELD_NAME}
我试图在我的 FreeMarker 模板中调用 Java 方法,该方法使用 public 静态 Java 变量作为其参数之一。例如,如果 test.ftl
中的 FreeMarker 代码是这样的:
${javaClass.getSomething(javaClass.VARIABLE)}
如果 class JavaClass
看起来像这样:
public class JavaClass {
public static final int VARIABLE = 1;
public String getSomething(int var) {
...
}
我在使用如下所示的模板时收到错误消息:
[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
并抛出 InvalidReferenceException
。我试过用其他不同的方式指定它,例如 JavaClass.VARIABLE
、${javaClass.VARIABLE}
和 ${JavaClass.VARIABLE}
,但它们都会抛出错误。
如何从 FreeMarker (.ftl) 模板的 Java 方法中调用 public Java 变量?
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);
然后在您的模板中使用
${myVariable["fully.qualified.package.ClassName"].FIELD_NAME}