Подтвердить что ты не робот

Как проверить, содержит ли строка значение в EL?

У меня есть список String и я устанавливаю его в сеанс:

 session.setAttribute("datas", result.getBody().getDatas());

Затем я хочу проверить JSP, если в атрибуте datas не содержится слово "яблоко", например. Если это не содержится, распечатать сообщение не будет. Сначала я попытался сделать что-то вроде этого:

   <c:forEach items="${datas}" var="data">
      <c:if test="${data!='apple'}">
          <p> Doesn't contained</p>
      </c:if>
   <c:for>          

Но вышеупомянутый код, если сеанс содержит следующие значения:

Apple, Банан Лимонный

Дважды печатает сообщение "Не содержит". Я знаю, что это нормально, но как я могу это сделать, чтобы сделать то, что хочу?

4b9b3361

Ответ 1

Тест != для точного неравенства. Вам нужно использовать 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>

Ответ 2

Вам понадобится 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() будет проверять частичное совпадение (наличие подстроки в заданной строке). Поэтому, если вы были данными [ "Ананас", "Банан", "Лимон" ], например, вы также получите совпадение. Я предполагаю, что вы хотите только сопоставить "яблоко" как полную строку.