Freemarker模板错误

问题描述:

当我点击登录按钮,并通过数据库成功登录后重定向到hello.ftl页面。但是,FTL页面显示此错误Freemarker模板错误

Freemarker模板错误(DEBUG模式;在生产中使用重新抛出!): 下面已经评估为空或丢失:==> VAR [模板 “hello.ftl”在第8行,第32列] ----提示:如果已知错误表达式 在合法地指向某些有时为空或缺少 的情况下,可以指定缺省值,如myOptionalVar!myDefault, 或使用< #if myOptionalVar什么时候存在< #else>何时失踪。 (这些 只覆盖了表达式的最后一步;要覆盖整个 表达式,请使用括号:(myOptionalVar.foo)!myDefault, (myOptionalVar.foo)---- ---- ---- FTL堆栈跟踪( “〜”表示与嵌套有关的 ): - 失败:#macro url relativeUrl额外... [ 模板“spring.ftl”在第89行第1列的“url”中] - 到达 通过:@spring .url“/ logout”,var =“logoutUrl”[模板 “hello.ftl”在第8行,第9列] ---- 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> 

请告诉我的解决方案,为什么这个代码是不起作用

+0

我已在此hello.ftl页面中添加了注销码,但它会给我freemarker模板错误。请查看代码并告诉我解决方案 –

它试图将var="logoutUrl"解释为var == "logoutUrl",并因此查找名为var的变量。为了避免这种情况,所有参数必须通过名字传递:

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

虽然给出额外的参数名称和值我不知道你的意思来实现这一点。也许你只想要<@spring.url logoutUrl />