24

我有一个字符串列表,并将其设置为会话:

 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>          

但是上述代码,如果会话包含以下值:

苹果香蕉柠檬

打印两次“不包含”消息。我知道这是正常的,但我该如何对待它才能做出我想要的?

4

2 回答 2

53

精确不等式的!=检验。您需要改用or函数。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>
于 2012-07-03T17:20:52.323 回答
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' 作为一个完整的字符串。

于 2012-07-03T22:36:20.617 回答