2010-08-03 13 views
8

J'essaie d'obtenir une sous-chaîne à partir d'une chaîne dans FreeMarker. Cependant, il y a 2 thigns à considérer:Limiter la longueur de la chaîne dans FreeMarker

  1. La chaîne peut être null
  2. La chaîne peut être plus courte que la longueur maximale de la chaîne

Je fais ce qui suit:

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

Je reçois une erreur de freemarker en disant:

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

Très étrange. Quelqu'un peut-il aider?

Répondre

19

L'erreur s'est résolue comme par magie après des tests approfondis. Doit être le karma.

Mon code final pour le contrôle en toute sécurité:

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

Hope it helps quelqu'un d'autre

7

Je suis sûr que vous êtes heureux, il travaille maintenant, mais l'erreur que vous recevez n'a rien à voir avec votre code de troncation de chaîne, c'est parce que votre </# si > est incorrect.

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


<#if condition > 
    This Will Show An Error 
<#/if> 
+2

Vous avez raison! Merci pour le suivi après 2 ans! –

+0

Hehe :) J'ai trouvé votre message à la recherche d'une réponse "tronquée" et je viens de remarquer votre erreur et elle ressemblait à celle que j'avais hier (pour la même raison). Je me suis cogné la tête pendant une heure aussi! – RockMeetHardplace

0

une solution sans utiliser if-else

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

cela - d'abord insérer un espace blanc à gauche - Chaîne tronquée pour une longueur de 26 caractères (si la chaîne est supérieure à 26 caractères)

J'ai essayé et cela a fonctionné pour que la chaîne ait au moins 26 caractères de long (si la chaîne est inférieure à 26 caractères) bien avec la VERSION 2.3.24