Freemarker 模板错误

Posted

技术标签:

【中文标题】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 模板错误的主要内容,如果未能解决你的问题,请参考以下文章

FreeMarker 模板错误!在struts2中

如何在 freemarker 模板中显示验证错误

Liferay,来自搜索的 Freemarker 错误模板,但不是来自其他链接

在 Freemarker 模板中显示 Spring MVC 验证错误

ExtentReport : FreeMarker 模板错误:以下已评估为 null 或缺失:

使用 <@s.generator 和迭代器标签时出现“Freemarker 模板错误”