【问题标题】:How to test if a string contains the given value in EL?如何测试字符串是否包含EL中的给定值?
【发布时间】:2012-07-03 17:17:32
【问题描述】:

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

 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>          

但上述代码,万一会话包含以下值:

苹果 香蕉 柠檬

打印两次“不包含”消息。我知道这很正常,但我该如何处理才能达到我想要的效果?

【问题讨论】:

    标签: jsp jstl el


    【解决方案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>
    

    【讨论】:

    • 别忘了在你的jsp顶部声明相关的taglib &lt;%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%&gt;
    • 否则它会抛出一个相当不言自明且非常容易谷歌搜索的异常/错误。
    【解决方案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() 将检查部分匹配(给定字符串中是否存在子字符串)。所以如果你的数据是 ["Pineapple", "Banana", "Lemon"] 例如你也会得到一个匹配。我假设你只想匹配 'apple' 作为一个完整的字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-03
      • 1970-01-01
      • 2017-11-21
      • 1970-01-01
      • 2012-02-18
      • 1970-01-01
      • 2014-07-23
      • 1970-01-01
      相关资源
      最近更新 更多