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
)
так далее..