2010-08-03 165 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