在我的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
是一种数字。谷歌搜索了一段时间后,我发现事实并非如此。
为什么"StoreCredit"
被视为freemarker.template.SimpleScalar
?
这就是FTL代表字符串的方式吗?
SimpleScalar
是否曾用于表示字符串以外的其他内容?或者这只是一个用于其他用途的通用标记。
答案 0 :(得分:2)
<if payout.paymentType.name??>
<#if payout.paymentType.name?string == "StoreCredit">
</#if>
</#if>
答案 1 :(得分:1)
是的,它用于表示Java String
,仅用于表示。
正如API文档(JavaDoc)所说,SimpleScalar
是“TemplateScalarModel
接口的简单实现”,而TemplateScalarModel
是“''字符串''模板语言数据 - type;就像在Java中一样,是一个不可修改的UNICODE字符序列。(这个接口的名称应该是TemplateStringModel
。这个用词不好用来自旧时代,当时它是FreeMarker中唯一的单值类型。)“。数字由TemplateNumberModel
。
SimpleScalar
,这些是FreeMarker用户不应担心的因果关系的技术细节。