这是我的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语句存在一些问题。
请帮助。
答案 0 :(得分:3)
由于历史原因,=
是==
的别名,但在预期转让的地方除外。因此'<#case value2 = 1>'
为'<#case value2 == 1>'
,因此最终为'<#case true>'
或'<#case false>'
,因此出现错误消息。正如你所想的那样,它应该是'<#case 1>'
等等,就像在C-ish语言中一样。截至手册中的最后一个例子,该例子是错误的......
答案 1 :(得分:1)
事实证明,如果我做以下
<#case 1>
CASE1
<#break>
<#case 2 >
CASE2
<#break>
<#case 3>
CASE3
<#break>
然后它似乎确实有效。虽然我不明白为什么它不适用于表达式,因为我从Freemarker Manual 看到了