【发布时间】:2012-09-13 07:01:04
【问题描述】:
我正在尝试做一些看起来应该相对简单的事情,并且遇到了一些障碍。
假设我有一个产品列表,我在名称products 下作为请求属性公开。还假设每个产品都有一个id 字段,并且我还设置了一堆请求属性,以selectedProduct_<product-id> 的形式表示选择了哪些。
我知道有更好的方法来表示此信息,例如将所有选定的 id 放入 Map 并对其进行检查,但我们假设无论出于何种原因我都无法使用该方法。
所以我想做的是迭代products 并仅在为当前产品设置selectedProduct_... 属性时发出一些标记。比如:
<c:forEach var="product" items="${products}">
<c:if test="${! empty selectedProduct_${product.id}}">
<div class="productId">${product.id}</div>
</c:if>
</c:forEach>
但这当然行不通,因为它在${! empty selectedProduct_${product.id}} 上死了。
如果我将产品 ID 硬编码到表达式中会起作用,例如:
${! empty selectedProduct_17}
...假设“17”是有效的产品 ID。显然这不切实际,但希望它说明了我正在努力实现的目标。基本上我需要:
- 确定要用于
forEach循环中每次迭代的正确selectedProduct_...值。像<c:set var="key" value="selectedProduct_${product.id}"/>这样简单的东西可以做到这一点,除非我不确定如何获取key并使用它来获取具有该名称的请求属性的值(没有作弊和在@987654334 中运行文字Java 代码@块)。 - 获取我在#1 中确定的名称的请求属性的值。这似乎是棘手的部分。
这可能使用纯 JSP/JSTL 吗?我知道我可以在<% %> 中运行一些Java 代码来解决这个问题,但这似乎是非常糟糕的形式。肯定存在更优雅的解决方案吗?
【问题讨论】: