【发布时间】:2013-12-11 19:25:27
【问题描述】:
editable.ftl
[#ftl]
[#macro editable field ]
[#if field??]
[#if isEditable]
<h:inputext value="${field}" />
[#else]
${field?eval}
[/#if]
[/#if]
[/#macro]
将其导入我的模板的正确方法是什么。我尝试使用 cfg.addAutoImport("me", "editable.ftl")。 当我尝试处理我的主模板时引发以下异常。
ERROR [freemarker.runtime] (http-localhost-127.0.0.1-8080-1) 执行 FreeMarker 模板时出错:freemarker.core.InvalidReferenceException:以下已评估为 null 或缺失: ==> 字段 [在模板“可编辑”中第 5 行第 30 列]
提示:如果已知失败的表达式合法地为空/缺失,请使用 myOptionalVar!myDefault 指定默认值,或使用 [#if myOptionalVar??]when-present[#else]when-missing[/#如果]。 (这些仅涵盖表达式的最后一步;要涵盖整个表达式,请使用括号:(myOptionVar.foo)!myDefault, (myOptionVar.foo)??
失败的指令: ==> ${field} [在模板“可编辑”第 5 行第 28 列] 在 freemarker.core.InvalidReferenceException.getInstance(InvalidReferenceException.java:98) [freemarker-2.3.20.jar:2.3.20] 在 freemarker.core.EvalUtil.coerceModelToString(EvalUtil.java:382) [freemarker-2.3.20.jar:2.3.20] 在 freemarker.core.Expression.evalAndCoerceToString(Expression.java:115) [freemarker-2.3.20.jar:2.3.20] 在 freemarker.core.DollarVariable.accept(DollarVariable.java:76) [freemarker-2.3.20.jar:2.3.20] 在 freemarker.core.Environment.visit(Environment.java:265) [freemarker-2.3.20.jar:2.3.20] 在 freemarker.core.MixedContent.accept(MixedContent.java:93) [freemarker-2.3.20.jar:2.3.20] 在 freemarker.core.Environment.visit(Environment.java:265) [freemarker-2.3.20.jar:2.3.20] 在 freemarker.core.Environment.include(Environment.java:1712) [freemarker-2.3.20.jar:2.3.20] 在 freemarker.core.Environment.importLib(Environment.java:1784) [freemarker-2.3.20.jar:2.3.20] 在 freemarker.core.Environment.importLib(Environment.java:1733) [freemarker-2.3.20.jar:2.3.20] 在 freemarker.template.Configuration.doAutoImportsAndIncludes(Configuration.java:1105) [freemarker-2.3.20.jar:2.3.20] 在 freemarker.core.Configurable.doAutoImportsAndIncludes(Configurable.java:1271) [freemarker-2.3.20.jar:2.3.20] 在 freemarker.core.Configurable.doAutoImportsAndIncludes(Configurable.java:1271) [freemarker-2.3.20.jar:2.3.20] 在 freemarker.core.Environment.process(Environment.java:242) [freemarker-2.3.20.jar:2.3.20]
宏代码应该在调用时执行,但这里似乎它们是在导入期间调用的。这里处理的真的是宏吗?请指导我这是怎么回事。
【问题讨论】:
标签: freemarker