如何使用JSP/EL/JSTL检查集合是否包含项
我正在使用Java8、Tomcat8、Servlet3.1.0、JSP2.0和JSTL1.2 我希望能够做到以下几点。但是,它不起作用如何使用JSP/EL/JSTL检查集合是否包含项,jsp,collections,jstl,el,Jsp,Collections,Jstl,El,我正在使用Java8、Tomcat8、Servlet3.1.0、JSP2.0和JSTL1.2 我希望能够做到以下几点。但是,它不起作用 <c:forEach var="item" items="${itemList}" varStatus="status"> <tr> <td>${status.index + 1}</td> <td>${item.itemCode}</td> <td>
<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>
servlet api
和jsp api
由Tomcat提供。jstl的版本是否正确?您可以使用jstl标记库中提供的contains函数。请查看更多详细信息@
这将对您有所帮助。事实证明它确实有效,但我手头还有另一个问题
我的实体(项
和用户
)来自Hibernate,来自两个不同查询中的两个不同DAO,因此收藏夹
列表中的项
与项列表中的项
是不同的对象
我没有在我的User
和Item
类中实现(重写)hashCode()
和equals()
方法,因此Collection.contains()
只是查看对象标识,而不是等价性
只要我实现了hashCode()
和equals()
方法,它就如预期的那样工作了
我发现这一点的方式是,我决定实现一个自定义TLD函数,该函数调用集合.contains(…)
方法,然后注意到,即使是返回false
,fn:contains
也是用于检查一个字符串是否包含另一个字符串中的值,不是为了检查集合是否包含给定项您可以参考此www.experts-exchange.com/Programming/Languages/Java/J2EE/Q_24847712.html,第4条注释使用此contains方法进行相同的检查。我怀疑它可能起作用,因为数组的字符串化表示包含对象的字符串化表示。实际上,它做了一个array.toString().contains(object.toString())
。这是一个很方便的侥幸,不是我想依赖的东西。如果子字符串的一个值与另一个值匹配错误。
<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>