抑制已经遇到的列表元素
suppress list elements that have already been encountered
您好,我有一个速度模板正在尝试编辑
它目前有一个看起来像
的块
#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
有人能指出我正确的方向吗?
这种逻辑(去重)可能是你的视图(Velocity)层要避免的事情。在 Model-View-Controller 之后,最好由控制器 类 管理此逻辑,让 Velocity 模板简单地呈现传递给它的数据结构。
例如,通过使用像java.util.Set
这样的数据结构,将不允许重复,因此模板不需要去重。
我个人认为 Rob Harrop 的 Pro Jakarta Velocity 是一本非常好的 MVC 指南,尤其是第 4 章 "Using Velocity in an MVC environment"。
让模型使用一个集合,让您的控制器代码填充集合,然后您的模板代码中的简单循环就可以像现在这样使用了。
一般来说,在视图层实现的逻辑越少越好。它还将使您的代码更易于测试,因此您无需启动演示组件、应用程序服务器等即可验证其行为。
如果真的没办法,逻辑一定要写在模板里,那么下面实现伪代码:
#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
的 add()
方法(布尔值)的输出被输出。另一个不在模板代码中编写的原因!
当然,您还需要确保 equals()
在添加到列表的类型上正确实现,以便列表操作 - contains()
和 add()
正常工作.
绝对是上述 MVC 方法的次等解决方案,但作为最后的选择提供。
您好,我有一个速度模板正在尝试编辑
它目前有一个看起来像
的块#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
有人能指出我正确的方向吗?
这种逻辑(去重)可能是你的视图(Velocity)层要避免的事情。在 Model-View-Controller 之后,最好由控制器 类 管理此逻辑,让 Velocity 模板简单地呈现传递给它的数据结构。
例如,通过使用像java.util.Set
这样的数据结构,将不允许重复,因此模板不需要去重。
我个人认为 Rob Harrop 的 Pro Jakarta Velocity 是一本非常好的 MVC 指南,尤其是第 4 章 "Using Velocity in an MVC environment"。
让模型使用一个集合,让您的控制器代码填充集合,然后您的模板代码中的简单循环就可以像现在这样使用了。
一般来说,在视图层实现的逻辑越少越好。它还将使您的代码更易于测试,因此您无需启动演示组件、应用程序服务器等即可验证其行为。
如果真的没办法,逻辑一定要写在模板里,那么下面实现伪代码:
#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
的 add()
方法(布尔值)的输出被输出。另一个不在模板代码中编写的原因!
当然,您还需要确保 equals()
在添加到列表的类型上正确实现,以便列表操作 - contains()
和 add()
正常工作.
绝对是上述 MVC 方法的次等解决方案,但作为最后的选择提供。