JSTL判断一个list集合里是否包含某个字符串

今天在写一个需求时,在jsp页面中要判断servlet带过来的 list 集合中是否包含某个字符串,如果包含则执行某种操作,如果不包含则执行另一种操作。起初用的是JSTL标签里 fn:contains标签,但却不能达到我的要求。最后查阅资料,总算找到了解决方法。

首先;fn:contains标签的作用是:判断一个输入字符串是否包含一个指定的子串。即该标签内部的实现原理是“包含”,而不是我们所需要的equals(即等于)。虽然在JavaSE 中 List 集合的确有一个contains方法,用来判断一个list集合里是否包含某个元素,但是在JSTL中contain确实完全不同的,所以,我们为了实现上面的需求,就不能使用fn:contains,而是使用 c:foreach标签来穷举实现判断是否包含。一下给出示例代码。

    首先:错误的实现list集合是否包含的代码原型:

<c:choose>
	<c:when test="${fn:contains(requestScope.list,'2013') } ">
	   <script type="text/javascript">
		alert("包含2013");
		</script>
		</c:when>
	<c:otherwise>
	    <script type="text/javascript">
		alert("没有包含2013!");
		 </script>
		</c:otherwise>
	</c:choose>
   然后是使用c:foreach实现判断是否包含的正确代码:

   

<c:set var="contains" value="no" />
	<c:forEach var="list" items="${requestScope.list }" begin="0"
		end="${fn:length(list)}">
	     <c:if test="${list == '2013' }">
		   <c:set var="contains" value="yes" />
		 </c:if>
		</c:forEach>
	<c:choose>
		<c:when test="${contains=='yes' }">
			<script type="text/javascript">
				alert("包含2013");
				</script>
		   </c:when>
		<c:otherwise>
			<script type="text/javascript">
				alert("没有包含2013!");
			    </script>
		   </c:otherwise>
	</c:choose>

   其中 在循环之前使用的c:set标签充当的是一个标志位的作用,如果不使用的话,可能会时代码重复执行。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值