12

FreeMarkerの文字列からサブ文字列を取得しようとしています。ただし、考慮すべき2つの問題があります。

  1. 文字列はnullにすることができます
  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> ...
    "${" ...
    "#{" ...

非常に奇妙な。誰か助けてもらえますか?

4

3 に答える 3

26

広範なテストの後、エラーは魔法のように自然に解決しました。カルマに違いない。

安全なチェックのための私の最終的なコード:

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

それが他の誰かに役立つことを願っています

于 2010-08-03T09:06:18.953 に答える
7

動作していることに満足していると思いますが、受け取ったエラーは String Truncation Code とは関係ありません。それは、</#if> が正しくないためです。

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


<#if condition >
    This Will Show An Error
<#/if>
于 2013-01-17T21:51:22.170 に答える
2

if-else を使用しないさらに簡単なソリューション

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

これは - 最初に左側に空白を挿入して、文字列が少なくとも 26 文字の長さになるようにします (文字列が 26 文字より短い場合) - 文字列を正確に 26 文字の長さに切り詰めます (文字列が 26 文字より長い場合)

私は試してみましたが、VERSION 2.3.24でうまくいきました

于 2016-05-12T17:27:13.000 に答える