2010-08-03 45 views
8

Tôi đang cố gắng lấy chuỗi con từ một chuỗi trong FreeMarker. Tuy nhiên có 2 thigns để xem xét:Giới hạn độ dài chuỗi trong FreeMarker

  1. Các chuỗi có thể được null
  2. Chuỗi có thể ngắn hơn thì độ dài chuỗi tối đa

tôi làm như sau:

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

Tôi gặp lỗi freemarker nói rằng:

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

Rất kỳ quặc. Có ai giúp được không?

Trả lời

19

Lỗi được giải quyết một cách kỳ diệu sau khi thử nghiệm rộng rãi. Phải là nghiệp.

mã cuối cùng của tôi để kiểm tra an toàn:

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

Hy vọng nó giúp người khác

7

tôi chắc chắn rằng bạn hài lòng nó làm việc bây giờ, nhưng lỗi mà bạn đã nhận được không có gì để làm với Mã cắt xén chuỗi của bạn, đó là vì </# nếu > của bạn không chính xác.

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


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

Bạn nói đúng! Cảm ơn bạn đã theo dõi sau 2 năm! –

+0

Hehe :) Tôi tìm thấy bài đăng của bạn đang tìm kiếm câu trả lời "cắt ngắn" và tôi vừa mới nhận thấy lỗi của bạn và nó trông giống như lỗi tôi đã có hôm qua (vì lý do tương tự). Tôi đập đầu tôi trong một giờ nữa! – RockMeetHardplace

0

một giải pháp dễ dàng hơn mà không cần dùng if-else

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

này sẽ - đầu tiên chèn khoảng trắng ở bên trái để đảm bảo chuỗi dài ít nhất 26 char (nếu chuỗi ngắn hơn 26 char) - cắt ngắn chuỗi thành 26 char dài (nếu chuỗi dài hơn 26 char)

Tôi đã thử và đã hoạt động tốt với VERSION 2.3.24

Các vấn đề liên quan