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"/>

虽然给出了额外的参数名称和值,但我不确定你想用这个实现什么。也许你只是想要&lt;@spring.url logoutUrl /&gt;

【讨论】:

以上是关于freemarker 一些错误整理的主要内容,如果未能解决你的问题,请参考以下文章

笔记之_Java整理freemarker

freeMarker

Anaconda创建 Jupyter 虚拟环境以及常见错误整理

android开发中常犯的几个错误整理

从 Java 更新 Access 数据库时出现“不支持的整理排序顺序”错误

java基础面试题整理2-异常