2010-08-03 277 views
8

我試圖從FreeMarker中的字符串中獲取子字符串。 但是有2個thigns考慮:限制FreeMarker中的字符串長度

  1. 字符串可以爲空
  2. 字符串可能是短於最大字符串長度

我做到以下幾點:

<#list landingpage1.popularItems as row> 
    <li> 
     <span class="minititle"> 
      <#assign minititle=(row.title!"")> 
      <#if minititle?length &lt; 27> 
       ${minititle} 
      <#else> 
       ${minititle?substring(0,26)} ... 
      <#/if> 
     </span> 
    </li> 
</#list> 

我收到一個freemarker錯誤說:

Failed to load templates: Encountered "</#list>" at line 144, column 65 in landingpage1.ftl. 
Was expecting one of: 
    <ATTEMPT> ... 
    <IF> ... 
    <LIST> ... 
    <FOREACH> ... 
    <SWITCH> ... 
    <ASSIGN> ... 
    <GLOBALASSIGN> ... 
    <LOCALASSIGN> ... 
    <INCLUDE> ... 
    <IMPORT> ... 
    <FUNCTION> ... 
    <MACRO> ... 
    <TRANSFORM> ... 
    <VISIT> ... 
    <STOP> ... 
    <RETURN> ... 
    <CALL> ... 
    <SETTING> ... 
    <COMPRESS> ... 
    <COMMENT> ... 
    <TERSE_COMMENT> ... 
    <NOPARSE> ... 
    <END_IF> ... 
    <BREAK> ... 
    <SIMPLE_RETURN> ... 
    <HALT> ... 
    <FLUSH> ... 
    <TRIM> ... 
    <LTRIM> ... 
    <RTRIM> ... 
    <NOTRIM> ... 
    <SIMPLE_NESTED> ... 
    <NESTED> ... 
    <SIMPLE_RECURSE> ... 
    <RECURSE> ... 
    <FALLBACK> ... 
    <ESCAPE> ... 
    <NOESCAPE> ... 
    <UNIFIED_CALL> ... 
    <WHITESPACE> ... 
    <PRINTABLE_CHARS> ... 
    <FALSE_ALERT> ... 
    "${" ... 
    "#{" ... 

很奇怪。 任何人都可以幫忙嗎?

回答

19

經過大量測試後,該錯誤神奇地解決了它自己。必須是業力。

我的安全檢查最終代碼:

<#assign minititle=(row.title!"")> 
<#if minititle?length &lt; 27> 
${minititle} 
<#else> 
${minititle?substring(0,26)} ... 
</#if> 

希望它可以幫助別人

7

我相信你很高興它的工作了,但你收到的錯誤有沒有關係你的字符串截斷碼,這是因爲你的< /#if >不正確。

<#if condition > 
    This Is Correct 
</#if> 


<#if condition > 
    This Will Show An Error 
<#/if> 
+2

你是對的!感謝2年後的跟進! – 2013-01-18 07:55:59

+0

呵呵:)我發現你的帖子尋找一個「截斷」的答案,我只是碰巧注意到你的錯誤,它看起來就像我昨天所做的一樣(出於同樣的原因)。我也一個小時都在抨擊我的頭腦! – RockMeetHardplace 2013-01-18 13:44:18

0

,而無需使用一種更簡單的解決方案的if-else

$ {minititle left_pad(26)[0 .. * 26]}

這將 - 首先插入左空白確保字符串至少有26個字符長度(如果字符串短於26個字符) - 截斷字符串到26個字符長度(如果字符串長於26個字符)

我試過了,以及VERSION 2.3.24