限制FreeMarker中的字符串长度

时间:2010-08-03 08:41:10

标签: java html jstl freemarker

我正在尝试从FreeMarker中的字符串中获取子字符串。 但是有两个方面需要考虑:

  1. 字符串可以为null
  2. 字符串可以短于最大字符串长度
  3. 我执行以下操作:

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

    很奇怪。 有人可以帮忙吗?

3 个答案:

答案 0 :(得分:23)

经过大量测试后,错误神奇地解决了。必须是业力。

我的安全检查最终代码:

<#assign minititle=(row.title!"")>
<#if minititle?length &lt; 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

配合得很好