我使用的是 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
是 Set
的 item
可能是我没有正确版本的依赖项。我的 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
的版本是否正确? 最佳答案
事实证明它确实有效,但我手头还有另一个问题。
我的实体( item
和 user
)来自 Hibernate,来自两个不同查询中的两个不同 DAO,因此 item
列表中的 favourites
与 item
中的 itemList
是不同的对象。
我没有在我的 hashCode()
和 equals()
类中实现(覆盖)User
和 Item
方法,所以 Collection.contains()
只是查看对象标识而不是等价。
一旦我实现了 hashCode()
和 equals()
方法,它就会按预期工作。
我发现这一点的方法是我决定实现一个调用 Collection.contains(...)
方法的自定义 TLD 函数,然后注意到即使它也返回 false
。
关于jsp - 如何使用 JSP/EL/JSTL 检查集合是否包含项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27270035/