1

这是我的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>

<@myMacro value1=3 value2=1 />

这是我得到的例外。

Exception in thread "main" java.lang.RuntimeException: freemarker.template.TemplateException: The only legal comparisons are between two numbers, two strings, or two dates. Left hand operand is a freemarker.template.SimpleNumber Right hand operand is a freemarker.template.TemplateBooleanModel$2

现在这是在 switch case 语句中,虽然异常中没有给出行号,但是我注释了 switch 语句并且没有异常,因此我的结论是它的 case 语句有问题。

请帮忙。

4

2 回答 2

3

由于历史原因=,它是 的别名==,除非在需要分配的地方。So '<#case value2 = 1>'is '<#case value2 == 1>',因此它最终是'<#case true>'or '<#case false>',因此是错误消息。所以正如你所想的,它应该是'<#case 1>'这样的,就像在 C-ish 语言中一样。截至手册中的最后一个示例,该示例是错误的...

于 2012-10-04T07:30:06.063 回答
1

事实证明,如果我执行以下操作

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

那么它似乎确实有效。虽然我不明白为什么它不能与表达式一起使用,因为我是从Freemarker 手册中看到的

于 2012-10-04T06:35:18.443 回答