2017-04-19 138 views
1

當我點擊登錄按鈕,並通過數據庫成功登錄後重定向到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模板錯誤。請查看代碼並告訴我解決方案 –

回答

0

它試圖將var="logoutUrl"解釋爲var == "logoutUrl",並因此查找名爲var的變量。爲了避免這種情況,所有參數必須通過名字傳遞:

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

雖然給出額外的參數名稱和值我不知道你的意思來實現這一點。也許你只想要<@spring.url logoutUrl />