freemarker 一些错误整理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了freemarker 一些错误整理相关的知识,希望对你有一定的参考价值。
参考技术A 1.关于boolean的配置freemarker中输出时可以使用这种方式输出$xxx?string("true","flase")
当xxx为true时显示字符串true,否则为字符串false,当然true,false字符串也可以换成其他字符串,比如yes和no。
单纯的输出true/false,可以这样写 $xxx?c
2.关于对象为空的配置
有时候请求或者响应里,如果有一个对象会为空,要对对象进行null的判断,不然会抛异常。
如下所示
需要用<#if ()??> </#if> 括号内填写条件
==> APIBillingMaintenanceService.response.body.transcationList [in template "sid-ED4B5F2B-1A2F-4A0F-80E4-8EEB0DD65CA9" at line 1, column 2308]
这个错误一般是模板内部写的有问题,比如我这个,
外部list起了别名,内部List就不能从最开始的APIBillingMaintenanceService.response.body.transcationList开始,更改如下
如上,这是freemarker处理之后显示的内容,list里的所有东西都丢了,模板如下
经过测试,将所有的BillingAccountList改成billingAccountList,就有映射值了
暂时原理未知,没有细看源码
Freemarker 模板错误
【中文标题】Freemarker 模板错误【英文标题】:Freemarker Template Error 【发布时间】:2017-09-15 05:52:28 【问题描述】:当我点击登录按钮并通过数据库成功登录后重定向到 hello.ftl 页面。但是ftl页面显示这个错误
FreeMarker 模板错误(调试模式;在生产中使用 RETHROW!): 以下已评估为 null 或缺失:==> var [in template “hello.ftl”在第 8 行第 32 列] ---- 提示:如果表达式失败 已知在法律上指的是有时为空的东西或 缺少,或者指定一个默认值,如 myOptionalVar!myDefault, 或使用 when-presentwhen-missing。 (这些 只覆盖表达式的最后一步;覆盖整个 表达式,使用括号: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL 堆栈跟踪(“~”表示 嵌套相关):-失败于:#macro url relativeUrl extra... [in 宏“url”中的模板“spring.ftl”在第 89 行,第 1 列] - 已到达 通过:@spring.url "/logout", var = "logoutUrl" [在模板中 第 8 行第 9 列的“hello.ftl”] ---- Java 堆栈跟踪(用于 程序员):---- freemarker.core.InvalidReferenceException:[... 异常消息已打印;见上面...]在 freemarker.core.InvalidReferenceException.getInstance(InvalidReferenceException.java:134) 在 freemarker.core.EvalUtil.compare(EvalUtil.java:196) 在 freemarker.core.EvalUtil.compare(EvalUtil.java:113) 在 freemarker.core.ComparisonExpression.evalToBoolean(ComparisonExpression.java:62) 在 freemarker.core.BooleanExpression._eval(BooleanExpression.java:30) 在 freemarker.core.Expression.eval(Expression.java:81) 在
<#import "/spring.ftl" as spring>
<html>
<body>
Welcome
<!-- For login user -->
<@spring.url '/logout' var="logoutUrl"/>
<form action="$logoutUrl" method="post" id="logoutForm">
<input type="hidden" name="$_csrf.parameterName"
value="$_csrf.token" />
</form>
<script>
function formSubmit()
document.getElementById("logoutForm").submit();
</script>
<#if "$pageContext.request.userPrincipal.name != null"?? >
<span><h2>
User : $pageContext.request.userPrincipal.name | <a
href="javascript:formSubmit()"> Logout</a>
</h2></span>
</#if>
</body>
</html>
请告诉我解决方案,为什么这段代码不起作用
【问题讨论】:
我在这个 hello.ftl 页面中添加了注销代码,但它给了我 freemarker 模板错误。请看代码并告诉我解决方案 【参考方案1】:它尝试将var="logoutUrl"
解释为var == "logoutUrl"
,并因此查找名为var
的变量。为避免这种情况,所有参数都必须按名称传递:
<@spring.url relativeUrl='/logout' var="logoutUrl"/>
虽然给出了额外的参数名称和值,但我不确定你想用这个实现什么。也许你只是想要<@spring.url logoutUrl />
?
【讨论】:
以上是关于freemarker 一些错误整理的主要内容,如果未能解决你的问题,请参考以下文章
Anaconda创建 Jupyter 虚拟环境以及常见错误整理