如何使用JSP / EL / JSTL检查集合是否包含项目

时间:2014-12-03 11:03:01

标签: jsp collections jstl el

我使用Java 8,Tomcat 8,Servlet 3.1.0,JSP 2.0和JSTL 1.2。

我希望能够做到以下几点。但是,它不起作用。

<c:forEach var="item" items="${itemList}" varStatus="status">
  <tr>
    <td>${status.index + 1}</td>
    <td>${item.itemCode}</td>
    <td>${item.displayName}</td>
    <td>
      <c:choose>
        <c:when test="${user.favourites.contains(item)}">Yes</c:when>
        <c:otherwise>No</c:otherwise>
      </c:choose>
    </td>
  </tr>
</c:forEach>

其中user.favouritesSet的{​​{1}}

可能是因为我没有正确版本的依赖项。我的POM包含;

item

<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jsp-api</artifactId> <version>2.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> servlet-api由Tomcat提供。 jsp-api的版本是否正确?

2 个答案:

答案 0 :(得分:4)

事实证明它 工作,但我手头有另一个问题。

我的实体(itemuser)来自Hibernate,来自两个不同查询中的两个不同的DAO,因此item列表中的favouritesitemitemList的不同对象。

我没有在我的hashCode()equals()类中实现(覆盖)UserItem方法,因此Collection.contains()只是在查看对象身份不等同。

一旦我实施了hashCode()equals()方法,它就会按预期工作。

我发现这一点的方式是我决定实施一个调用Collection.contains(...)方法的自定义TLD函数,然后注意到即使那样也返回false

答案 1 :(得分:-3)

您可以使用JSTL标记库中提供的contains函数。请发现更多详情@ JSTL fn:contains() Function

这会对你有帮助。