Skip to content

feilong isContains

feilong edited this page May 22, 2020 · 1 revision

判断一个值,是否在一个集合(或者可以被转成Iterator)当中  

自定义标签参数说明:( feilong:isContains)

参数 说明 是否必须required 默认 是否支持动态参数
collection 一个集合,将会被转成Iterator,可以为逗号隔开的字符串,会被分隔成Iterator true true
value 任意类型的值,最终toString 判断比较 true   无   true

  示例:

1.jsp 顶端 申明引用

<%@ taglib prefix="feilong" uri="http://java.feilong.com/tags-common"%>

2.代码编写

场景描述: 循环输出100个商品,每个商品 如果是限量款,那么显示"限量发售"(不想在command 里面加标识字段)

如果 这个商品被贴了限量款标签,那么显示 "限量发售"

使用c标签代码:

<c:set var="isLimited" value="false" />
<c:forEach items="${pagination.items }" var="skuFromSolrCommand">
.....
	<c:set var="isLimited" value="false" /><!--每次循环生成标识-->
	<c:forEach items="${skuFromSolrCommand.labels }" var="label">
		<c:if test="${label eq 'limited' }">
			<c:set var="isLimited" value="true" /><!--标识复原-->
			<div class="icon_limitsale">
				<em>限量发售</em>
			</div>
		</c:if>
	</c:forEach> 
	.......
</c:forEach> 

换成使用feilong:isContains 标签代码

<feilong:isContains collection="${skuFromSolrCommand.labels }" value="limited" >		
	<div class="icon_limitsale">
		<em>限量发售</em>
	</div>
</feilong:isContains>

可以看出来,使用feilong:isContains 代码比较简洁易懂

3.原理说明:

collection参数 ,会被转成 Iterator,

支持

  • 数组,
  • Collection,
  • Map (自动取 map 的values来迭代),
  • Enumeration,
  • Dictionary,
  • Iterator,
  • 逗号分隔的String

再循环 Iterator, 每个值toString 和 传入的 value.toString() 判断

如果有相等,则立即返回true 否则返回false

如果 collection参数为null,则返回false

core

Clone this wiki locally