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

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

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

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

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

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

Яблоко Банан Лимон

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


person Alex Dowining    schedule 03.07.2012    source источник


Ответы (2)


!= проверяет точное неравенство. Вам необходимо использовать _2 _ или функцию 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>
person BalusC    schedule 03.07.2012
comment
Не забудьте объявить соответствующую taglib в верхней части jsp <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> - person Adrien Be; 13.08.2013
comment
В противном случае это вызвало бы довольно самоочевидное и вполне приемлемое для Google исключение / ошибку. - person BalusC; 13.08.2013

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

person anotherdave    schedule 03.07.2012