freemarker if последовательность операций

Я пытаюсь написать #if оператор с последовательностью чисел. В основном, если определенное поле соответствует любому из подмножества чисел (показано ниже с || или операторы), затем назначьте его как "Баярея", elseif другое подмножество, затем другое имя и т. д. Возможно ли это без множества вложенных операторов "или"?

Я получаю синтаксическую ошибку, говорящую о том, что ожидается логическое утверждение да / нет.

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

2 ответа

Вам не нужно вложение:

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

Хотя это, конечно, слишком многословно, но вы можете сделать это:

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

Но я думаю, что вы ищете это (или это в сочетании с #assign, если у вас есть несколько #elseif-s):

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

Это тоже возможно (только не забудьте #break-s):

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

Это четыре хороших ответа выше. Чтобы расширить это, я бы сделал что-то вроде этого:

<#assign pref_store = TEST_CONTACTS_LIST.PREFERRED_STORE>

<#assign area = "">

<#assign group1 = [12,21,22,38,46,67,71,74,76,77,83,86,104,113,119,143]>

<#assign group2 = [34,62,84,91,137,144,152,169]>

<#assign group3 = [18,44,49,50,61,68,121,182]>

<#if group1?seq_contains(pref_store)>

    <#assign area = "bayarea">

<#elseif group2?seq_contains(pref_store)>

    <#assign area = "blueridge">

<#elseif group3?seq_contains(pref_store)>

    <#assign area = "frontrange">

<#else>

    <#assign area = "whatever">

</#if>

Ваш любимый магазин ${area},


В качестве альтернативы, вместо последовательностей / массивов, вы также можете установить эти значения в виде строки.

Например:

<#assign pref_store = "${TEST_CONTACTS_LIST.PREFERRED_STORE}">

<#assign group1 = "12,21,22,38,46,67,71,74,76,77,83,86,104,113,119,143">

тогда оператор if будет следующим:

<#if group1?contains(pref_store)>   

(Обратите внимание на ?contains вместо ?seq_contains)

так далее..

Другие вопросы по тегам