0

バックグラウンド

私のftlファイルには、次の<#if>ステートメントがありました

<#if payout.paymentType.name == "StoreCredit">

さて、そのステートメントは次のエラーを生成することがわかりました

Caused by: The only legal comparisons are between two numbers, two strings, or two dates.
Left  hand operand is a freemarker.ext.beans.SimpleMethodModel
Right hand operand is a freemarker.template.SimpleScalar

これ <#if>が問題の原因であることがわかるまでにしばらく時間がかかり、このように修正しました

<#if payout.paymentType.name() == "StoreCredit">

SimpleScalarどういうわけか、 aは数値の一種であるという印象を受けました。しばらくグーグルで調べたところ、そうではないことがわかりました。

質問

"StoreCredit"と見なされるのはなぜfreemarker.template.SimpleScalarですか?

それはFTLが文字列を表現する方法ですか?

SimpleScalar文字列以外のものを表すために使用されたことはありますか? または、これは他の用途にも使用される単なる一般化されたトークンですか。

4

2 に答える 2

2
<if payout.paymentType.name??>
    <#if payout.paymentType.name?string == "StoreCredit">
    </#if>
</#if>
于 2013-08-16T17:49:36.803 に答える
1

はい、それは Java を表すためのものStringであり、それだけです。

API ドキュメント (JavaDoc) が言うように、 「インターフェースSimpleScalarの単純な実装」であり、「文字列」テンプレート言語データ型です。Java のように、変更不可能な UNICODE 文字シーケンスです。(このインターフェースの名前この誤称は、これが FreeMarker で唯一の単一値型であった昔から受け継がれています。)". 数値は の実装によって表されます。TemplateScalarModelTemplateScalarModelTemplateStringModelTemplateNumberModel

ところで、FreeMarker 2.3.20 には不可解な型エラー メッセージが少なくなっています。文字列、数値、ブール値などSimpleScalarについて説明しています。これらは、因果関係のある FreeMarker ユーザーが心配する必要のない技術的な詳細です。

于 2013-08-17T08:14:41.593 に答える