java - Freemarker 模板错误

标签 java spring-mvc spring-boot spring-security freemarker

当我点击登录按钮时,通过数据库成功登录后,它会重定向到 hello.ftl 页面。但是ftl页面显示这个错误

FreeMarker template error (DEBUG mode; use RETHROW in production!): The following has evaluated to null or missing: ==> var [in template "hello.ftl" at line 8, column 32] ---- Tip: If the failing expression is known to be legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: #macro url relativeUrl extra... [in template "spring.ftl" in macro "url" at line 89, column 1] - Reached through: @spring.url "/logout", var = "logoutUrl" [in template "hello.ftl" at line 8, column 9] ---- Java stack trace (for programmers): ---- freemarker.core.InvalidReferenceException: [... Exception message was already printed; see it above ...] at freemarker.core.InvalidReferenceException.getInstance(InvalidReferenceException.java:134) at freemarker.core.EvalUtil.compare(EvalUtil.java:196) at freemarker.core.EvalUtil.compare(EvalUtil.java:113) at freemarker.core.ComparisonExpression.evalToBoolean(ComparisonExpression.java:62) at freemarker.core.BooleanExpression._eval(BooleanExpression.java:30) at freemarker.core.Expression.eval(Expression.java:81) at

<#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>

请告诉我解决方案,为什么此代码不起作用

最佳答案

它试图解释 var="logoutUrl"var == "logoutUrl" ,从而查找名为 var 的变量。为了避免这种情况,所有参数都必须按名称传递:

<@spring.url relativeUrl='/logout' var="logoutUrl"/>

尽管给出了额外的参数名称和值,但我不确定您想通过此实现什么目的。也许您只是想要 <@spring.url logoutUrl />

关于java - Freemarker 模板错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43488302/

相关文章:

java - 创建项目时发生错误 - Eclipse

java - Sonarqube 中的 JVM 错误

hibernate - Spring/Hibernate @Transactional - 在它应该之前关闭 session

javascript - Ajax 发送多部分/表单数据

java - 我应该在 Spring MVC Web 应用程序的 DAO 层或服务层上进行缓存吗?

java - 使用 postman 测试具有 RequestParam 的休息服务

java - Gradle 看不到我的 swing 组件

java - 如何使用 Spring Boot 在 JSON 中包含 ID

java - X-CSRF-TOKEN 不是由 Spring Boot 生成的

java - 在同步方法中读取值时的安全发布