Limit string length in FreeMarker

匿名 (未验证) 提交于 2019-12-03 03:05:02

问题:

I'm trying to get a substring from a string in FreeMarker. However there are 2 thigns to consider:

  1. The string can be null
  2. The string can be shorter then the maximum string length

I do the following:

<#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> 

I get a freemarker error saying:

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> ...     "${" ...     "#{" ... 

Very odd. Can anybody help?

回答1:

The error magically solved itself after extensive testing. Must be karma.

My final code for safe checking:

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

Hope it helps somebody else



回答2:

I'm sure you're happy it's working now, but the error you were receiving had nothing to do with your String Truncation Code, it's because your </#if> is incorrect.

<#if condition >     This Is Correct </#if>   <#if condition >     This Will Show An Error <#/if> 


回答3:

an even easier solution without using if-else

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

this will - first insert white space on left to ensure the string is at least 26 char long (if the string is short than 26 char) - truncate string to exact 26 char long (if the string is longer than 26 char)

I've tried and it worked well with VERSION 2.3.24



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!