Templates Freemarker中的开关大小写:TemplateException

Templates Freemarker中的开关大小写:TemplateException,templates,exception,freemarker,Templates,Exception,Freemarker,这是我的testMacro.txt <#macro myMacro value1 value2> <#list 1..value1 as x> <#if x=value1> <#switch value2> <#case value2 = 1> CASE1 <#break> <#case value2

这是我的
testMacro.txt

<#macro myMacro value1 value2>
<#list 1..value1 as x>
 <#if x=value1>
      <#switch value2>
           <#case value2 = 1>
                CASE1    
           <#break>
           <#case value2 =2 >
                CASE2   
           <#break>
           <#case value2 = 3>
                CASE3    
           <#break>
      </#switch>
 <#else>
             ELSE
 </#if>
</#list>

案例1
案例2
案例3
其他的


这是我得到的一个例外

线程“main”java.lang.RuntimeException中的异常:freemarker.template.TemplateException:唯一合法的比较是两个数字、两个字符串或两个日期之间的比较。
左侧操作数是freemarker.template.SimpleNumber
右侧操作数是freemarker.template.TemplateBooleanModel$2

这是在switch-case语句中,虽然在异常中没有给出行号,但我对switch语句进行了注释,没有异常,因此我得出结论,case语句存在一些问题


请帮忙。

因为如果我做了以下事情

       <#case 1>
            CASE1    
       <#break>
       <#case 2 >
            CASE2   
       <#break>
       <#case 3>
            CASE3    
       <#break>

案例1
案例2
案例3

那么它似乎确实起作用了。虽然我不明白为什么它不能与表达式一起工作,因为我从

中看到了这一点,如果我执行以下操作

       <#case 1>
            CASE1    
       <#break>
       <#case 2 >
            CASE2   
       <#break>
       <#case 3>
            CASE3    
       <#break>

案例1
案例2
案例3

那么它似乎确实起作用了。虽然我不明白为什么它不能与表达式一起工作,因为我从

中看到,出于历史原因,
=
=
的别名,但在需要分配任务的地方除外。因此
'
'
,因此它最终是
'
'
,因此出现错误消息。因此,正如您所想,它应该是
之类的,就像在C-ish语言中一样。从本手册的最后一个示例来看,该示例是错误的…

出于历史原因
=
=
的别名,预期分配的地方除外。因此
'
'
,因此它最终是
'
'
,因此出现错误消息。因此,正如您所想,它应该是
之类的,就像在C-ish语言中一样。对于手册中的最后一个示例,该示例是错误的…

value、refValue1等:表达式计算为相同类型的标量。从manual.value、refValue1等:表达式计算为相同类型的标量。从手册上看。花了我一整天的时间,我觉得我很幸运。:)干杯。花了我一整天的时间,我觉得我很幸运干杯