如何测试字符串是否包含EL中的给定值?

时间:2012-07-03 17:17:33

标签: jsp jstl el

我有一个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>          

但前面提到的代码,如果会话包含以下值:

苹果 香蕉 柠檬

打印两次“不包含”消息。我知道这是正常的,但我怎么能这样做才能做出我想要的东西呢?

2 个答案:

答案 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'作为一个完整的字符串来匹配。