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

これはswitchcaseステートメントにありますが、例外には行番号は示されていませんが、switchステートメントにコメントし、例外はなかったので、caseステートメントに問題があると結論付けています。

親切に助けてください。

4

2 に答える 2

3

歴史的な理由から、割り当てが予想される場所を除いて=、のエイリアスです。==もそうなので、最終的に'<#case value2 = 1>'はまたはになり、エラーメッセージが表示されます。あなたが理解しているように、それはC言語のようにそうあるべきです。マニュアルの最後の例の時点で、その例は間違っています...'<#case value2 == 1>''<#case true>''<#case false>''<#case 1>'

于 2012-10-04T07:30:06.063 に答える
1

私が次のことをするとわかるように

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

その後、それは機能しているようです。Freemarker Manualから見たので、なぜ式で機能しないのかわかりませんが

于 2012-10-04T06:35:18.443 に答える