Предельная длина строки в FreeMarker - PullRequest
11 голосов
/ 03 августа 2010

Я пытаюсь получить подстроку из строки в FreeMarker.Однако следует учитывать 2 значения:

  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>

Я получаю ошибку бесплатного маркера, говорящую:

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

Очень странно.Кто-нибудь может помочь?

Ответы [ 3 ]

24 голосов
/ 03 августа 2010

Ошибка волшебным образом решилась после тщательного тестирования. Должна быть карма.

Мой окончательный код для безопасной проверки:

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

Надеюсь, это поможет кому-то еще

7 голосов
/ 18 января 2013

Я уверен, что вы счастливы, что он работает сейчас, но полученная вами ошибка не имеет ничего общего с вашим кодом усечения строки, потому что ваш </ # if> неверен.

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


<#if condition >
    This Will Show An Error
<#/if>
0 голосов
/ 12 мая 2016

еще более простое решение без использования if-else

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

это будет - сначала вставьте пробел слева, чтобы длина строки была не менее 26 символов (если длина строки меньше 26 символов) - обрезать строку до 26 символов (если длина строки более 26 символов)

Я пытался, и это хорошо работало с версией 2.3.24

...