我使用的是 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.favouritesSetitem
可能是我没有正确版本的依赖项。我的 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-apijsp-api 由 Tomcat 提供。 jstl 的版本是否正确?

最佳答案

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

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

我没有在我的 hashCode()equals() 类中实现(覆盖)UserItem 方法,所以 Collection.contains() 只是查看对象标识而不是等价。

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

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

关于jsp - 如何使用 JSP/EL/JSTL 检查集合是否包含项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27270035/

10-12 00:37
查看更多