我正在尝试从FreeMarker中的字符串中获取子字符串。 但是有两个方面需要考虑:
我执行以下操作:
<#list landingpage1.popularItems as row>
<li>
<span class="minititle">
<#assign minititle=(row.title!"")>
<#if minititle?length < 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> ...
"${" ...
"#{" ...
很奇怪。 有人可以帮忙吗?
答案 0 :(得分:23)
经过大量测试后,错误神奇地解决了。必须是业力。
我的安全检查最终代码:
<#assign minititle=(row.title!"")>
<#if minititle?length < 27>
${minititle}
<#else>
${minititle?substring(0,26)} ...
</#if>
希望它有助于其他人
答案 1 :(得分:7)
我确定你很高兴它现在正在工作,但你收到的错误与你的字符串截断代码无关,这是因为你的&lt; /#if&gt;是不正确的。
<#if condition >
This Is Correct
</#if>
<#if condition >
This Will Show An Error
<#/if>
答案 2 :(得分:0)
更简单的解决方案,而不使用if-else
$ {minititle?left_pad(26)[0 .. * 26]}
这会 - 首先在左边插入空格以确保字符串长度至少为26个字符(如果字符串短于26个字符) - 将字符串截断为26个字符长(如果字符串长于26个字符)
我已尝试过,它与VERSION 2.3.24
配合得很好