我有一个String列表,我把它设置为一个会话:
session.setAttribute("datas", result.getBody().getDatas());
然后我想检查JSP,如果在datas属性中没有包含单词“apple”,例如。如果未包含,则打印不包含的消息。最初我试图做这样的事情:
<c:forEach items="${datas}" var="data">
<c:if test="${data!='apple'}">
<p> Doesn't contained</p>
</c:if>
<c:for>
但前面提到的代码,如果会话包含以下值:
苹果 香蕉 柠檬
打印两次“不包含”消息。我知道这是正常的,但我怎么能这样做才能做出我想要的东西呢?
答案 0 :(得分:48)
!=
测试完全不等式。您需要改为使用fn:contains()
或fn:containsIgnoreCase()
功能。
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
...
<c:forEach items="${datas}" var="data">
<c:if test="${not fn:containsIgnoreCase(data, 'apple')}">
<p>Doesn't contain 'apple'</p>
</c:if>
</c:forEach>
答案 1 :(得分:5)
你需要我们 fn:toLowerCase():
<c:forEach items="${datas}" var="data">
<c:if test="${fn:toLowerCase(data) ne 'apple'}">
<p>Doesn't contain</p>
</c:if>
</c:forEach>
使用 fn:containsIgnoreCase()将检查部分匹配(给定字符串中是否存在子字符串)。因此,如果您的数据是[“Pineapple”,“Banana”,“Lemon”],那么您也会得到一个匹配。我假设你只想把'apple'作为一个完整的字符串来匹配。