Я пытаюсь вызвать метод Java в своем шаблоне FreeMarker, который использует общедоступную статическую переменную Java как один из ее параметров. Например, если код FreeMarker в test.ftl
это:Как вызвать общедоступную переменную Java в FreeMarker
${javaClass.getSomething(javaClass.VARIABLE)}
и если класс 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
и ws InvalidReferenceException
. Я попытался указать это другими способами, например JavaClass.VARIABLE
, ${javaClass.VARIABLE}
и ${JavaClass.VARIABLE}
, но все они бросают ошибки.
Как вы могли бы назвать общедоступную переменную Java из метода Java в шаблоне FreeMarker (.ftl)?
Это лучше использовать 'ObjectWrapper', используемый в' Configuration', предполагая, что это 'BeansWrapper' подкласс (как' DefaultObjectWrapper'). – ddekany
Также, вероятно, лучше сделать 'model.addAttribute (« ClassName », statics.get (ClassName.class.getName())), поэтому в шаблоне вы можете просто написать' $ {ClassName.FIELD_NAME} '. – ddekany
Да, справедливо - создание ключа имя класса, а затем добавление модели для этого класса индивидуально, вероятно, приятнее. – Chii