当前位置 : 主页 > 编程语言 > java >

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

来源:互联网 收集:自由互联 发布时间:2021-06-25
我使用 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.dis
我使用 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.favourites是一组项目

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

<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和jsp-api由Tomcat提供. jstl的版本是否正确?

事实证明它确实有效,但我手头有另一个问题.

我的实体(项目和用户)来自Hibernate,来自两个不同查询中的两个不同的DAO,因此收藏夹列表中的项目是与itemList中的项目不同的对象.

我没有在User和Item类中实现(重写)hashCode()和equals()方法,因此Collection.contains()只是查看对象标识而不是等价.

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

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

网友评论