抑制已经遇到的列表元素

2024-03-23

您好,我有一个正在尝试编辑的速度模板

它目前有一个看起来像的块

#foreach( $element in $myList )
  $element.field1 ($element.field2) issued by $element.field ($element.field4 )
<br><br>
#end

问题是列表中的某些元素是重复的,我需要抑制重复项。

我想要的伪代码是

for each element in list
    if element is not in displayed
        display element
        add element to displayed
    endif
endfor

有人能指出我正确的方向吗?


这种逻辑(重复数据删除)可能是您的视图(速度)层中应该避免的。下列的模型-视图-控制器 https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller,最好让这个逻辑由控制器类管理,让 Velocity 模板简单地渲染它传递的数据结构。

例如,通过使用诸如java.util.Set,不会接受重复项,因此不需要模板去重复。

我个人找到了 Rob Harrop 的专业雅加达速度 http://www.apress.com/9781590594100这是一本非常好的 MVC 指南,尤其是第 4 章“在 MVC 环境中使用 Velocity”。

让模型使用集合,让控制器代码填充集合,然后可以像现在一样使用模板代码中的简单循环。

一般来说,在视图层中实现的逻辑越少越好。它还将使您的代码更易于测试,因此您可以验证其行为,而无需启动演示组件、应用程序服务器等。

如果确实没有选择并且逻辑绝对必须编写在模板中,那么以下实现了所提供的伪代码:

#set($displayed = [])
#foreach( $element in $myList )
  #if(!$displayed.contains($element))
    $element.field1 ($element.field2) issued by $element.field ($element.field4 )
    <br><br>
    #set($ignore = $displayed.add($element))
  #end
#end

注意混乱的情况#set($ignore = $displayed.add($element))- 必须这样做才能抑制输出java.util.List's add()方法(布尔值)被输出。不在模板代码中编写此内容的另一个原因!

当然,您还需要确保equals()在添加到列表中的类型上正确实现,以便列表操作 -contains() and add()正常工作。

绝对是比上面的 MVC 方法差的解决方案,但作为最后的选择而提出。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

抑制已经遇到的列表元素 的相关文章

随机推荐

  • 如何删除SSIS中数据流任务中的列?

    I use SQL Server 2016我很忙DataFlow task In my DataFlow task I use Multicast component因为某些原因 在我的中创建一个新的流程后DataFlow 我需要删除新流程
  • 如何使用 ActionScript 3 在 Flash 中创建文本按钮?

    当我尝试使用文本字段作为按钮时 它似乎没有buttonMode财产 如何在 Flash 项目中使用 ActionScript 以编程方式创建文本按钮 它应该是一个简单的文本 可以点击 您可以添加TextField to a Sprite并将
  • 如何在具有提升权限的 WiX 中创建的 MSI 中运行自定义操作?

    我有一个安装程序需要访问注册表并使用自定义操作复制和删除文件 在 Windows XP 中 安装程序运行良好 但在 Vista 和 7 中 安装程序显示错误 因为它无法访问文件夹 但如果我以管理员身份运行安装程序 则一切正常 因此 我需要安
  • firebreath JSAPI 在 firefox 中不会被识别

    首先介绍一下我使用 Firebreath 所做的一些背景知识 我正在使用 firebreath 在浏览器中开发渲染查看器插 件 我在插件中定义了两种 MIME 类型 一种用于主查看器 另一种用于 2D 平面图 在每个页面中 仅允许一个主查看
  • 反应本机视图拍摄捕捉模糊屏幕截图

    我正在使用react native snap shot 库来共享我的屏幕 它对于小内容工作正常 但对于详细视图长滚动视图 其模糊且文本不可读
  • 将 java.sql.date 转换为 java.time.LocalDateTime

    我如何转换java sql Date从 JDBC 数据库返回到java time LocalDateTime 实际上比我想象的要容易 这对我有用 java sql ResultSet result result getTimestamp v
  • 多个action.class.php

    我确实有一个模块 例如帐户 当然 您会在 acount actions action class php 中找到一个名为的文件 PHP 文件action class php 变得越来越大 可以延长吗 举个例子 account action
  • 当我拥有原始文件时恢复 AES 加密文件密码

    如果某人同时拥有加密文件和原始文件 有没有办法知道用于加密文件的秘密是什么 AES 是一种分组密码 不易受已知明文攻击 http en wikipedia org wiki Known plaintext attack 蛮力是你唯一的选择
  • Ext JS:xtype 有什么用?

    我看到 Ext JS 中有很多例子 其中不是实际创建 Ext JS 对象 而是一个带有xtype属性被传入 这有什么用 如果无论如何都要创建对象 性能增益在哪里 如果这是原因 xtype是识别特定组件的简写方法 panel Ext Pane
  • 在这种特定情况下,使用成员初始值设定项列表和在构造函数中赋值之间有区别吗?

    在内部和生成的代码方面 以下之间是否存在真正的区别 MyClass MyClass capacity 15 data NULL len 0 and MyClass MyClass capacity 15 data NULL len 0 谢谢
  • 进程的页表是否映射到内核地址空间?

    我当时正在做 Windows 系统编程 想知道是否可以在源代码级别访问进程的页表 这是我所了解的与虚拟内存相关的页表 假设用户刚刚在 Windows 操作系统 32 位 上运行一个名为 A 进程的进程 首先 操作系统为A进程创建并维护4GB
  • ER 图中的 mysql 工作台列图标意味着什么?

    谁能帮我解释一下 MySQL Workbench 中创建的数据库 ER 图中的图标 蓝钻 实心 蓝钻 未填充 红钻等 Thanks 我在 MySQL 的网站上找到了这些资源 http dev mysql com doc workbench
  • 一个数组占用多少空间?

    如果我创建 10 个整数和一个 10 的整数数组 占用的总空间会有什么差异吗 我必须创建一个包含数百万条记录的布尔数组 所以我想了解数组本身将占用多少空间 整数数组表示为保存整数的内存块和对象头 对于 32 位 JVM 对象标头通常需要 3
  • 有修订的三重存储

    我需要存储 RDF 三元组 同时跟踪修改 有这项服务吗 或者 在使用上下文感知三重存储时如何跟踪修订 Edit 请注意 我不仅仅需要变更集 我还需要查看过去任何时间的三元组 我试图通过存储额外的三元组来解决这类问题 这些三元组描述了谁在何时
  • 为什么不能在函数中声明模板?

    Reading C 模板 完整指南 http www amazon co uk Templates Complete Guide David Vandevoorde dp 0201734842它说 请注意 模板不能被声明 在一个函数中 它不
  • Leanback 库支持 API 级别 19 Android for TV 应用程序吗?

    是否有针对 Android API 级别 19 的 Leanback 库支持 在这个链接中https developer android com reference android support v17 leanback package
  • 从 AudioBuffer 在 Node.js 中写入 wav 文件

    我是 Node js 编程新手 我正在尝试将 m4a 文件转换为 wav 文件 我使用了 audiobuffer to wav 和 web audio api 这是我的代码 const fs require fs const toWav r
  • Java接口和继承

    如果我们有 public interface Foo public class Bar implements Foo 之间有区别吗 public class BarBar extends Bar implements Foo and pub
  • 如何使用 AVFoundation 将视频转换为动画 gif?

    在使用 AVFoundation 和 AVCamRecorder 录制电影后 我正在推送一个新的 UIViewController 目前 我正在从保存电影的 URL 播放电影 效果很好 我在理解如何将视频从 URL 转换为动画 gif 时遇
  • 抑制已经遇到的列表元素

    您好 我有一个正在尝试编辑的速度模板 它目前有一个看起来像的块 foreach element in myList element field1 element field2 issued by element field element