我花了好几个小时试图让一些freemarker代码输出我想要的东西。本质上,我想让它从产品中抓取一个特定的 "属性",它定义了某些东西的总成本。用这个数字--乘以订购的商品数量,然后减去已经支付的金额。最终,我试图为每一个订购的项目计算,将这些数字加在一起,得出一个剩余的到期余额。
<#list order.items as orderItem>
<#list orderItem.attributes as attribute>
<#if "${attribute.name}" == ("Total Cost")>
<#assign subtotal=orderItem.subtotal?keep_after("$")>
<#assign total += (attribute.value?number * orderItem.quantity?number - subtotal?number)>
</#if>
</#list>
</#list>
Total: ${total}
当我运行这个的时候,我的变量是空的(因为我官方看不到任何错误输出,我假设这意味着我得到了一个错误).我最初的问题源于定义的变量(orderItem.subtotal)被列为一个字符串,里面有一个美元符号,所以我不得不设置它来删除它,然后把它作为一个数字。attribute.value始终是一个数字,但被当作一个字符串来处理。 orderItem.quantity是一个数字,我也试着用这个。
<#list order.items as orderItem>
<#list orderItem.attributes as attribute>
<#if "${attribute.name}" == ("Total Cost")>
<#assign subtotal=orderItem.subtotal?keep_after("$")>
<#assign total ++ (attribute.value?number * orderItem.quantity?number - subtotal?number)>
</#if>
</#list>
</#list>
Total: ${total}
用++表达式的时候,情况更糟糕了 导致我的整个模板在生成的时候都是空白的 而不是只有那个变量。
我是不是做错了什么?我似乎无法让这个变量递增,以便在我的模板上打印出这个总数。
这里真正的问题是,你看不到错误信息。用这样的语言工作要难得多。如果你不能让开发人员解决这个问题,有一个技巧。把你正在做的那块模板放在了 Your actual template comes here!
下面,现在你会看到错误信息。
<#attempt>
<#assign myTemplate><#noparse>
Your actual template comes here!
</#noparse></#assign>
<@myTemplate?interpret />
<#recover>
<p>Template error:
<pre>
${.error}
</pre>
</#attempt>
当然,这只是在你开发模板的时候,之后不要把它放在那里,就像这样。
在你的第2个示例中,没有所谓的 <#assign total ++ otherStuff>
所以这是一个解析错误(你没有看到)。(有疑问时请查看FreeMarker手册)。
另外,如果情况不好,你可能会发现这个服务很方便。https:/try.freemarker.apache.org。
这段代码应该会有帮助。
[#assign orderItems = [
{
"name":"prod1",
"price":"$1,000.99",
"quantity":"2"
},
{
"name":"prod2",
"price":"$10.00",
"quantity":"3"
},
{
"name":"prod3",
"price":"$20.00",
"quantity":"3"
}
]]
[#assign total = 0]
<br>Total on start: ${total}
[#list orderItems as orderItem]
<br>Adding cost of ${orderItem.name} (price: ${orderItem.price}, qty: ${orderItem.quantity})
[#assign total += orderItem.quantity?number * orderItem.price?keep_after("$")?replace(",","")?number]
<br>total: ${total}
[/#list]
<br>Final total: ${total}
输出:
Total on start: 0
Adding cost of prod1 (price: $1,000.99, qty: 2)
total: 2,001.98
Adding cost of prod2 (price: $10.00, qty: 3)
total: 2,031.98
Adding cost of prod3 (price: $20.00, qty: 3)
total: 2,091.98
Final total: 2,091.98