2017-09-18 3 views
0

J'essaie d'écrire une instruction #if avec une séquence de nombres. Fondamentalement, si un certain champ correspond à un sous-ensemble de nombres (illustré ci-dessous avec || ou opérateurs), puis l'attribuer comme "bayarea", elseif un sous-ensemble différent, puis un nom différent, etc. Est-ce possible sans un tas de "imbriqués" ou "déclarations?Freemarker si séquence d'instructions

Je reçois une erreur de syntaxe indiquant qu'il attend une instruction booléenne oui/non.

<#if TEST_CONTACTS_LIST.PREFERRED_STORE == 
{12||21||22||38||46||67||71||74||76||77||83||86||104||113||119||143> 
{bayarea} 
<#elseif TEST_CONTACTS_LIST.PREFERRED_STORE == 
{34||62||84||91||137||144||152||169}> 
{blueridge} 
<#elseif TEST_CONTACTS_LIST.PREFERRED_STORE == 
{18||44||49||50||61||68||121||182}> 
{frontrange} 
<#else> 
</#if> 

Répondre

1

Vous n'avez pas besoin de nidification:

<#if TEST_CONTACTS_LIST.PREFERRED_STORE == 12 
    || TEST_CONTACTS_LIST.PREFERRED_STORE == 21 || ...> 

bien que ce soit certainement trop bavard, mais vous pouvez le faire:

<#assign store = TEST_CONTACTS_LIST.PREFERRED_STORE> 
<#if store == 12 || store == 21 || ...> 

Mais je pense que ce que vous recherchez est ce (ou cela combiné avec le #assign, si vous en avez plusieurs #elseif -s):

<#if [12, 21, ...]?seq_contains(TEST_CONTACTS_LIST.PREFERRED_STORE)> 

Ceci est une possibilité trop (juste ne pas oublier les #break -s):

<#switch TEST_CONTACTS_LIST.PREFERRED_STORE> 
    <#case 12><#case 21>... 
    {bayarea} 
    <#break> 
    <#case 34><#case 62>... 
    {bluebridge} 
    <#break> 
    ... 
</#switch>