关于FTL的SimpleScalar

时间:2013-08-16 17:43:36

标签: java freemarker

背景

在我的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是否曾用于表示字符串以外的其他内容?或者这只是一个用于其他用途的通用标记。

2 个答案:

答案 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

的实现表示 BTW,FreeMarker 2.3.20具有较少的神秘类型错误消息。它讨论字符串,数字,布尔值等SimpleScalar,这些是FreeMarker用户不应担心的因果关系的技术细节。