Freemarker - 无法让变量增加值。

问题描述 投票:0回答:1

我花了好几个小时试图让一些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}

用++表达式的时候,情况更糟糕了 导致我的整个模板在生成的时候都是空白的 而不是只有那个变量。

我是不是做错了什么?我似乎无法让这个变量递增,以便在我的模板上打印出这个总数。

variables freemarker
1个回答
0
投票

这里真正的问题是,你看不到错误信息。用这样的语言工作要难得多。如果你不能让开发人员解决这个问题,有一个技巧。把你正在做的那块模板放在了 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。


0
投票

这段代码应该会有帮助。

[#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
© www.soinside.com 2019 - 2024. All rights reserved.