freemarker if语句排序

时间:2017-09-18 18:24:09

标签: logic freemarker responsys

我试图用一系列数字写一个#if语句。基本上,如果某个字段与任何一个数字子集匹配(如下面的||或运算符所示),则将其指定为" bayarea",elseif不同的子集,然后是不同的如果没有一堆嵌套的"或者#34;这是可能的。语句?

我收到语法错误,说它正在等待布尔值是/否语句。

<#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 个答案:

答案 0 :(得分: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 - s,那么这个与#elseif相结合):

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

答案 1 :(得分: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

等等。