ERP系统PDF设计(HTML+Freemarker):如何实现仅在有符合条件订单行时显示完整表格
嗨,这个问题很好解决,我来给你捋清楚~
你当前的代码只判断了order.item是否有内容,但没检查里面有没有quantity大于0的行——所以哪怕所有行的quantity都是0,只要order.item不是空的,表头还是会被渲染出来。
解决思路很简单:先把符合条件的订单行过滤出来,再判断这个过滤后的集合是否有内容,只有当它有内容时,才渲染整个表格(包括表头和行)。
这里用Freemarker的?filter指令就能轻松实现,修改后的代码如下:
<#-- 先过滤出quantity大于0的订单行 --> <#assign validTranLines = order.item?filter(tranline -> tranline.quantity > 0)> <#-- 只有当过滤后的集合有内容时,才渲染整个表格 --> <#if validTranLines?has_content> <table class="itemtable" style="width: 100%; margin-top: 10px;"> <thead> <tr> <th colspan="8">Item</th> <th align="right" colspan="3">Quantity</th> </tr> </thead> <#list validTranLines as tranline> <tr> <td colspan="8">${tranline.item}</td> <td align="right" colspan="3">${tranline.quantity}</td> </tr> </#list> </table> </#if>
关键修改点说明:
- 过滤有效行:用
?filter(tranline -> tranline.quantity > 0)把所有quantity大于0的行筛选出来,存到validTranLines变量里 - 判断渲染时机:只在
validTranLines?has_content为真时,才创建整个表格——这样就不会出现空表头的情况了 - 简化列表渲染:因为已经过滤过了,列表循环的时候不需要再判断
tranline.quantity!=0,直接遍历validTranLines就行
这样调整后,就能完美实现你想要的效果:只有存在符合条件的订单行时,才显示整个表格,且表格里只包含这些符合条件的行~
内容的提问来源于stack exchange,提问作者JeppePeppe
相关产品推荐
相关产品推荐

