当我点击登录按钮时,通过数据库成功登录后,它会重定向到 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/