0

我正在尝试#if用一系列数字编写一个语句。基本上,如果某个字段匹配任何数字子集(如下所示,使用||or 运算符),则将其分配为“bayarea”、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>
4

2 回答 2

1

你不需要嵌套:

<#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>
于 2017-09-19T06:17:49.897 回答
0

这是上面四个很好的答案。为了扩展它,我会做这样的事情:

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

ETC..

于 2018-07-17T17:55:32.403 回答