JSTL FoEach Checks在RequestScope中设置了containsIgnoreCase

时间:2019-06-25 04:50:46

标签: jsp jstl

我在servlet的requestScope中设置了一个城市列表。

这是我的代码

我已经添加了必需的Taglib

能否请您告诉我containsIgnoreCase为什么不起作用

public class City {

    private Long id;
    private String name;
    private int population;

    // getters and setters 
}

// 

<c:forEach items="${requestScope.cityList}" var="city">
            <tr>

        <c:if test = "${fn:containsIgnoreCase(${city.name}, 'NewYork')}">
         <p>Add a Color Here for NewYork <p>
      </c:if>

            <c:if test = "${fn:containsIgnoreCase(${city.name}, 'Houston')}">
         <p>Add a Color Here Houston <p>
      </c:if>


                <td><c:out value="${city.id}"></c:out></td>
            <td><c:out value="${city.name}"></c:out></td>
            <td><c:out value="${city.population}"></c:out></td>
        </tr>
        </c:forEach>

3 个答案:

答案 0 :(得分:1)

应为${fn:containsIgnoreCase(city.name, 'NewYork')}。您已经在JSP EL表达式内,因此在该表达式内再次使用${}是无效的。

答案 1 :(得分:1)

containsIgnoreCase无效,因为您尝试在另一个表达式(${city.name})内打开表达式(${fn:containsIgnoreCase()})。

您应该将代码简化为:

<c:if test = "${fn:containsIgnoreCase(city.name, 'Houston')}">

答案 2 :(得分:0)

您不能嵌套EL表达式。

${city.name}在另一个EL表达式中时将为null。这就是为什么它不起作用。

但是您可以将它们串联起来

${foo}${bar}

在这种情况下,您可以在forEach块中设置一个局部变量,如下所示:

    <c:forEach items="${requestScope.cityList}" var="city">
 <c:set var="cityVar" value="${city.name}" />
                <tr>

            <c:if test = "${fn:containsIgnoreCase(cityVar, 'NewYork')}">
             <p>Add a Color Here for NewYork <p>
          </c:if>

                <c:if test = "${fn:containsIgnoreCase(cityVar, 'Houston')}">
             <p>Add a Color Here Houston <p>
          </c:if>


                    <td><c:out value="${city.id}"></c:out></td>
                <td><c:out value="${city.name}"></c:out></td>
                <td><c:out value="${city.population}"></c:out></td>
            </tr>
            </c:forEach>

希望有帮助